在R语言中为数据框每行生成两列数值间的随机值
解决每行生成区间随机数的问题
没问题,我来帮你搞定这个需求!首先先确认你的数据框结构,方便后续操作:
# 重现你的数据框 df <- structure(list(lowage = c(45, 15, 9, 51, 22, 45, 4, 4, 9, 25), highage = c(50, 21, 14, 60, 24, 50, 8, 8, 14, 30)), .Names = c("lowage", "highage"), row.names = c(NA, 10L), class = "data.frame")
接下来分两种常见场景给你解决方案:
1. 生成连续型均匀随机数(比如带小数的年龄)
直接用R的runif()函数就能实现高效的向量化操作,完美匹配你的需求:
# 添加age列,每行数值介于lowage和highage之间 df$age <- runif(n = nrow(df), min = df$lowage, max = df$highage)
代码说明:
n = nrow(df):指定生成与数据框行数一致的随机数数量min = df$lowage:将每行的lowage作为该随机数的下限max = df$highage:将每行的highage作为该随机数的上限- 生成的是均匀分布的随机数,区间内每个数值被选中的概率均等
2. 生成整数型随机数(比如整数年龄)
如果你的场景需要整数形式的年龄,可以用mapply()结合sample()来实现:
# 添加整数类型的age_int列 df$age_int <- mapply(function(low, high) sample(low:high, size = 1), df$lowage, df$highage)
代码说明:
mapply()会逐行遍历lowage和highage列,把每对数值传入自定义函数sample(low:high, size = 1):从low到high的整数序列中随机抽取1个值- 生成的随机数都是整数,且包含区间两端的数值
最后你可以用print(df)查看处理后的完整数据框。
内容的提问来源于stack exchange,提问作者Apricot
相关产品推荐
相关产品推荐

