使用dplyr进行group_by并按组有条件地改变数据帧

时间:2017-03-23 15:25:57

标签: r group-by dplyr

我想将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}}

任何见解都表示赞赏。谢谢!

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))