我想将dplyr函数用于group_by并有条件地改变df。鉴于此样本数据:
A B C D E
1 1 1 0.25 0
1 1 2 0 0
1 2 1 0.5 0
1 2 2 0 0
1 3 1 0.75 0
1 3 2 0.25 0
2 1 1 0 1
2 1 2 0.5 1
2 2 1 0 1
2 2 2 0 1
2 3 1 0 1
2 3 2 0 1
3 1 1 0.5 0
3 1 2 0 0
3 2 1 0.25 0
3 2 2 1 0
3 3 1 0 0
3 3 2 0.75 0
我想使用新的列E通过B == 1,C == 2和D>来对A进行分类。 0.对于所有这些条件都成立的A的每个唯一值,则E = 1,否则E = 0.因此,输出应如下所示:
foo$E <- foo %>%
group_by(A) %>%
mutate(E = {if (B == 1 & C == 2 & D > 0) 1 else 0})
我最初尝试过这段代码,但条件似乎没有正常工作:
{{1}}
任何见解都表示赞赏。谢谢!
答案 0 :(得分:4)
@ eipi10的答案有效。但是,我认为您应该使用case_when
代替ifelse
。它是矢量化的,并且在更大的数据集上会更快。
foo %>% group_by(A) %>%
mutate(E = case_when(any(B == 1 & C == 2 & D > 0) ~ 1, TRUE ~ 0))