如何用case_when实现“否则保留原值”?R语言向量条件修改
解决方案
1. 基础R直接索引赋值(最简洁直接)
直接利用向量索引定位b == 1的位置,将a对应位置替换为99:
a <- c(0, 1, 2, 3, 4, NA, NA, 7) b <- c(0, 0, 0, 0, 0, 0, 1, 0) a[b == 1] <- 99 a # 输出结果:[1] 0 1 2 3 4 NA 99 7
这种方法不需要加载额外包,执行效率高,完全满足需求。
2. 使用dplyr的case_when实现(含“否则保留原值”逻辑)
case_when按顺序匹配条件,要实现“否则保留原值”,只需在最后添加TRUE ~ 原值的分支——TRUE会匹配所有未被前面条件覆盖的情况:
library(dplyr) a <- c(0, 1, 2, 3, 4, NA, NA, 7) b <- c(0, 0, 0, 0, 0, 0, 1, 0) a <- case_when( b == 1 ~ 99, # 当b=1时替换为99 TRUE ~ a # 所有其他情况保留a的原始值 ) a # 输出结果:[1] 0 1 2 3 4 NA 99 7
原始的NA值因为不满足b == 1的条件,会被TRUE ~ a分支保留,完全符合预期。
内容的提问来源于stack exchange,提问作者SpecialK201
相关产品推荐
相关产品推荐

