在R语言中基于现有数据框生成带随机变异的新数据框的实现方法
方法1:使用dplyr包(最简洁高效)
如果你习惯使用tidyverse生态,用mutate()搭配across()可以快速完成操作,自动保留原列名:
library(dplyr) # 仅对数值列执行随机化,非数值列自动保留(若所有列均为待处理数值,可替换为across(everything())) r.camrysales <- camrysales %>% mutate(across(where(is.numeric), ~rnorm(n(), mean = .x, sd = 0.1*.x)))
方法2:Base R实现(无额外依赖)
不需要加载第三方包,用lapply遍历列即可,列名会自动继承原数据框:
# 筛选出所有数值列(如果全表都是待处理的数值列可跳过这步) num_cols <- sapply(camrysales, is.numeric) r.camrysales <- camrysales # 对所有数值列执行随机化 r.camrysales[num_cols] <- lapply(camrysales[num_cols], function(col) { rnorm(length(col), mean = col, sd = 0.1*col) })
补充说明
如果需要随机结果可复现,在运行上述代码前添加set.seed(自定义数字)即可,例如set.seed(123),每次运行都会生成相同的随机值。两种方法都完全保留原数据框的列名、结构,非数值列不会被修改。
内容的提问来源于stack exchange,提问作者J F
相关产品推荐
相关产品推荐

