我有一个值如下的列,我希望在每行相同值的“+或_”20%之间取一个随机值,并将其分配给另一列。
SAMPLE_DATA
benchmark
1 100
2 200
3 250
4 400
5 150
6 1000
现在我想通过在每行的基准值的+或-20%之间添加1个随机数,在同一数据中创建一个名为value的变量。
预期产出:
benchmark value
1 100 87
2 200 213
3 250 255
4 400 320
5 150 180
6 1000 900
下面的片段说明了我实现这一目标的尝试;它按预期工作,但需要花费太多时间才能执行:
for (i in 1:nrow(sample_data)){
sample_data$value[i] = sample_data$benchmark[i] + runif(1,min = -0.2*sample_data$benchmark[i], max = 0.2*sample_data$benchmark[i])
}
如何改进代码的性能?
答案 0 :(得分:5)
怎么样:
sample_data$value <- runif(length(sample_data$benchmark),
min = 0.8 * sample_data$benchmark,
max = 1.2 * sample_data$benchmark)
答案 1 :(得分:1)
library(dplyr)
sample_data %>% mutate(value = benckmark + (benckmark * runif(1, -0.20, 0.20)))
经过测试
sample_data <- tribble(~Benckmark, 100, 200, 250)