r - dplyr:根据分组细节更改变量
问题描述
我想根据同一组中存在哪些其他条目来更新条目。
参考玩具示例:我想将“C”(camp)更改为“B”(camp_1),以防变量 both.camp == 0 并且该组恰好缺少“C”。
玩具数据集:
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))))
推荐阅读
- performance - 了解 Intel CPU 上的 4K 混叠
- powershell - 当合法变量字符跟随字符串中的变量时,如何创建PowerShell字符串插值?
- angularjs - 模块 ngAnimate 不可用
- javascript - 如何使用 JavaScript 打开多个 DIV
- visual-studio - 在visual studio中,windows平台自动格式化特征文件的快捷键是什么?
- java - 无法将 fx:id 与控制器链接
- excel - 在公式 VBA 中更改字符串
- android-studio - 如何在 android studio 中从 .png 图标创建矢量图标?
- java - SearchView 在未找到结果时停止应用程序
- ios - 如果不读取 BLE 特征,我如何知道它是否已加密?