繁体   English   中英

dplyr:根据分组详细信息更改变量

[英]dplyr: change variable according to grouping specifics

我想根据同一组中存在的其他条目来更新条目。

参照玩具示例:如果变量both.camp == 0并且该组恰好缺少“ C”,我想将“ C”(camp)更改为“ B”(camp_1)。

玩具数据集:

data <- data.frame(ID=c(1,1,1,0,0,0),date=c(1,1,1,1,1,1),both.camps=c(0,0,0,1,1,1),camp=c("A","A","C","A","B","C"))


  ID date both.camps camp
1  1    1          0    A
2  1    1          0    A
3  1    1          0    C
4  0    1          1    A
5  0    1          1    B
6  0    1          1    C

尝试的代码:

data <- data %>% group_by(ID,date) %>% mutate(camp_2=ifelse(both.camps==0 & camp=="C" & !"B" %in% camp ,"B",
                                                              ifelse(both.camps==0 & camp=="C" & !"A" %in% camp, "A", camp)))

理想的结果

desiderata <- data.frame(ID=c(1,1,1,0,0,0),date=c(1,1,1,1,1,1),both.camps=c(0,0,0,1,1,1),camp=c("A","A","C","A","B","C"), camp_2=c("A","A","B","A","B","C"))

  ID date both.camps camp camp_2
1  1    1          0    A      A
2  1    1          0    A      A
3  1    1          0    C      B
4  0    1          1    A      A
5  0    1          1    B      B
6  0    1          1    C      C

这可以在较小的数据集上解决问题,我不确定这是否是最好的方法。

data <- data %>% 
         group_by(ID,date) %>% 
         mutate(camp_2=ifelse(camp=="C" & all(both.camps==0) & !any("B" %in% camp) ,"B",
                                                                  ifelse(camp=="C" & all(both.camps==0) & !any("A" %in% camp),"A", as.character(camp))))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM