如何使用dplyr包将R数据框所有列的0替换为NA?
如何用dplyr将tibble中所有列的0替换为NA?
解决方案
这里提供两种适配不同dplyr版本的实现方式:
方法1:dplyr 1.0.0及以上版本(推荐用法)
用across()指定对所有列操作,搭配匿名函数完成替换:
library(dplyr) # 构造原始数据 Date = seq(as.Date("2022/1/1"), by = "day", length.out = 10) x = c(rnorm(9),NA) y = c(NA,0,rnorm(4),6,0,0,10) z = c(rnorm(4),0,0,NA,NA,3,2) d = tibble(Date,x,y,z) # 替换所有列的0为NA d_cleaned <- d %>% mutate(across(everything(), ~ifelse(.x == 0, NA, .x)))
方法2:兼容旧版dplyr(1.0.0以下)
如果你的dplyr版本较低,可使用mutate_all()实现相同效果:
d_cleaned <- d %>% mutate_all(~ifelse(.x == 0, NA, .x))
补充说明
across(everything())会选中数据框全部列,也可以指定特定列(比如across(c(x,y,z))仅处理数值列)Date列是日期类型,0 == Date的结果始终为FALSE,不会被误修改- 匿名函数
~ifelse(.x == 0, NA, .x)的逻辑:若当前值等于0则替换为NA,否则保留原值
内容的提问来源于stack exchange,提问作者Homer Jay Simpson
相关产品推荐
相关产品推荐

