R语言中如何将特定变量的符合条件观测值设置为NA
问题原因
原代码的replace函数缺少第一个参数,也就是要修改的目标变量向量。replace的标准语法为replace(目标向量, 匹配条件, 替换值),你之前的写法没有传入每个Q开头的变量作为修改对象,因此无法生效。
正确实现方式
方法1:适配旧版dplyr的mutate_at写法
在replace中补入当前遍历变量的占位符.即可:
Fusion_2_nom <- Fusion_2_nom %>% mutate_at(vars(starts_with("Q")), ~replace(., token %in% c("3d4faa","214c61", "a786b6", "52a719", "1f9887", "9b6347"), NA))
这里~用来定义匿名函数,.代表当前正在处理的每一个以Q开头的变量。
方法2:新版dplyr推荐的across写法
dplyr 1.0.0之后mutate_at系列函数已软弃用,更推荐用across实现相同逻辑,后续兼容性更好:
Fusion_2_nom <- Fusion_2_nom %>% mutate(across(starts_with("Q"), ~ifelse(token %in% c("3d4faa","214c61", "a786b6", "52a719", "1f9887", "9b6347"), NA, .)))
两种写法的执行效果完全一致,都会把指定token对应的所有Q开头变量的取值替换为NA。
内容的提问来源于stack exchange,提问作者David Potrel
相关产品推荐
相关产品推荐

