使用dplyr将DataFrame部分随机值替换为NA的优化方法咨询
更简洁的实现方案
你可以直接在mutate中为每个列单独生成随机判断条件,无需临时变量,代码更紧凑且可读性更好:
df %>% mutate( value1 = replace(value1, runif(n()) < 0.1, NA), value2 = replace(value2, runif(n()) < 0.2, NA) )
优化说明
- 用
n()替代length(df$id):dplyr中的n()会直接返回当前数据框的行数,无需依赖特定列,更通用 - 避免重复定义临时变量:直接在
replace的索引条件中生成随机数,省去重复赋值rand的步骤 - 去掉
which():逻辑向量(runif(n()) < 0.1)可直接作为索引,无需转换为位置向量,代码更简洁
另一种等价写法(用ifelse)
如果你觉得ifelse的逻辑更直观,也可以这样写:
df %>% mutate( value1 = ifelse(runif(n()) < 0.1, NA, value1), value2 = ifelse(runif(n()) < 0.2, NA, value2) )
两种写法都能保证value1和value2的缺失值是独立随机生成的,完全符合你的需求。
内容的提问来源于stack exchange,提问作者data science newb
相关产品推荐
相关产品推荐

