[英]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.