为R中的多个变量替换组内的特定chr值
1. 总结问题
嗨,我比较新R,这是我关于堆栈溢出的第一个问题,但我已经从这个站点学习了一段时间。我发现了类似的问题,但它们解释了如何删除缺失值、使用数值或仅适用于少量 ID。
我有一个大数据框(200 000+ 行),其中一个变量是一个字母数字 ID,代表唯一的候选者,其他变量代表不同的特征。某些候选项在文件中多次包含,但对于同一特征具有不同的值。我想解决这些差异,以便以后能够删除重复项。数据结构类似于:
df <- tibble(ID = c("123abc", "123abc", "123abc", "456def", "456def", "789ghi"),
var1 = c("No", "Yes", "No", "No", "No", "No"),
var2 = c("No", "No", "No", "Yes", "No", "No"),
var3 = c("No", "No", "No", "No", "No", "Yes"))
我的目标是首先根据 ID 创建子组,然后在每个 ID 中搜索以查看它们是否至少有一个“是”值,如果是,则将所有值更改为“是”。我想对几个变量(var1、var2、var3)重复这个。这是我想要的结果:
df <- tibble(ID = c("123abc", "123abc", "123abc", "456def", "456def", "789ghi"),
var1 = c("Yes", "Yes", "Yes", "No", "No", "No"),
var2 = c("No", "No", "No", "Yes", "Yes", "No"),
var3 = c("No", "No", "No", "No", "No", "Yes"))
在此之后,我将删除重复的行以仅保留我需要的数据。
df <- distinct(df, across(), .keep_all = TRUE)
2. 描述你尝试过的东西
我找到了部分解决方案,但我很难把它放在一起。我可以使用group_byfrom通过 ID 重新dplyr分组我的数据,但我在将其他功能应用于组时遇到问题:
df <- df %>% group_by(ID)
我可以使用与的if组合将“否”替换为“是” any,但如果没有组,它会更改 var1 中的所有值:
if(any(df$var1 == "Yes"))
{ df$var1 = "Yes" }
我正在尝试创建的解决方案类似于用于切片数据的创建循环,循环遍历重复的位置,通过使用for循环 ID 然后循环变量,但不替换为随机值。