如何在R中没有for循环的情况下将公式应用于所有行?

时间:2017-05-28 14:54:42

标签: r

我有一个值如下的列,我希望在每行相同值的“+或_”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])
}

如何改进代码的性能?

2 个答案:

答案 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)