如何用单行R代码将数据框中>0的值转0、=0的值转1?
解决数据框值替换的单行最优方案
你的问题出在两次across的操作逻辑上:第一次把所有大于0的值替换为0后,第二次又把所有等于0的值(包括刚替换过来的0)都换成1,最终非NA值全变成1,不符合预期。需要在单次遍历中完成所有判断,避免覆盖。
最简单行代码(两种方式可选)
方式一:利用逻辑值转数值(最简洁)
逻辑值TRUE转数值是1,FALSE是0,NA保持不变,刚好匹配你的需求:
df1 <- df %>% mutate(across(c(cc, bb, dd), ~1 * (.x == 0)))
方式二:用ifelse分层判断(更直观)
如果需要更清晰的逻辑展示,可以嵌套ifelse:
df1 <- df %>% mutate(across(c(cc, bb, dd), ~ifelse(.x > 0, 0, ifelse(.x == 0, 1, .x))))
验证结果
处理后的数据框完全符合预期:
- 原大于0的值→0
- 原等于0的值→1
- NA保持不变
内容的提问来源于stack exchange,提问作者potro
相关产品推荐
相关产品推荐

