【发布时间】:2020-06-01 15:24:12
【问题描述】:
我有一个包含变量“id”和“var1”的数据框,类似于以下内容:
set.seed(100)
id <- sample(1:3, 10, replace = TRUE)
set.seed(101)
var1 <- sample(LETTERS[1:3], 10, replace = TRUE)
df <- data.frame(id, var1)
如果某些字符串在 var1 中至少出现两次,我想按 'id' 对数据框进行分组并创建新列 'condition1'、'condition2'、'condition3' 等等。因此,当 'df' 按 'id' 分组时,如果 var1 == 'A' 并且出现在至少 2 行中,则 'condition1' 将为 1,否则 'condition1' 将设置为 0。类似地,'condition2' 将基于“B”,“condition3”将基于“C”。
所以,到目前为止,我已经尝试使用dplyr 并想出了以下内容-
library(dplyr)
df2 <- df %>%
group_by(id) %>%
summarise(condition1 = case_when(**var1 == "A" appears in at least 2 rows** ~ 1, **var1 == "A" appears only once or does not appear at all** ~ 0),
condition2 = case_when(**var1 == "B" appears in at least 2 rows** ~ 1, **var1 == "B" appears only once or does not appear at all** ~ 0),
condition3 = case_when(**var1 == "C" appears in at least 2 rows** ~ 1, **var1 == "C" appears only once or does not appear at all** ~ 0))
如何正确定义case_when 中的条件?也欢迎任何其他解决此问题的方法。
【问题讨论】:
-
你能显示预期的吗?输出
-
出现两次是什么意思? des 意思是连续的?
-
@akrun 预期结果是
df2 <- data.frame(id = 1:3, condition1 = c(0,1,0), condition2 = c(0,1,0), condition3 = c(0,0,1)) -
如果是这种情况,只需在 RuiBarradas 代码中将
mutate更改为summarise -
@Onyambu 字符串不必连续出现两次,它可以在分组的标题中至少出现两次。对于上面的数据,按id分组后,id=1时C只出现一次,A和B根本不出现,所以对于所有条件都是0。对于id=2,A和B至少出现两次,所以condition1和2应该是1,C应该是0。