背景
我有這個資料框df:
df <- data.frame(ID = c("a","a","a","b", "c","c","c","c"),
event = c("red","black","blue","white", "orange","red","gray","green"),
stringsAsFactors=FALSE)
里面有一些人 ( ID) 和一個event. 我想根據給定的任何單元格是否包含“紅色”或“藍色”來創建一個condition指示 1 或 0的新變數。ID
問題
我可以完成這項作業,但僅限于匹配的行。我想要的是,如果一個人的任何event單元格包含“紅色”或“藍色”,他們的所有單元格都condition應該被標記1。換句話說,我想要這樣:
ID event condition
a red 1
a black 1
a blue 1
b white 0
c orange 1
c red 1
c gray 1
c green 1
我試過的
到目前為止,我已經使用此代碼來獲得此結果:
df <- df %>%
mutate(condition = ifelse(df$event %in% c("red","blue"), 1, 0))
ID event condition
a red 1
a black 0
a blue 1
b white 0
c orange 0
c red 1
c gray 0
c green 0
換句話說,匹配的行被標記1,但我希望 ID 的所有行與任何匹配的行都被標記1。
uj5u.com熱心網友回復:
我們需要any圍繞邏輯向量從%in%- 此外引數可以反轉(在 OPs 代碼中,它回傳 1,它匹配元素“紅色”或“藍色”,而其他元素為 0。
library(dplyr)
df %>%
group_by(ID) %>%
mutate(condition = (any(c('red', 'blue') %in% event))) %>%
ungroup
-輸出
# A tibble: 8 × 3
ID event condition
<chr> <chr> <int>
1 a red 1
2 a black 1
3 a blue 1
4 b white 0
5 c orange 1
6 c red 1
7 c gray 1
8 c green 1
uj5u.com熱心網友回復:
這是另一種方法:
library(dplyr)
library(stringr)
df %>%
group_by(ID) %>%
mutate(condition = if_else(str_detect(event, paste(c("red", "blue"), collapse = "|")), 1, 0))
ID event condition
<chr> <chr> <dbl>
1 a red 1
2 a black 0
3 a blue 1
4 b white 0
5 c orange 0
6 c red 1
7 c gray 0
8 c green 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/482654.html
