R使用相同的数字突变多个列

时间:2017-09-21 20:49:16

标签: r dplyr

我们说我有三列:columnA,columnB,columnC,

我想改变三列中的每一列。问题是,如果我做了像

这样的事情
mutate(columnA = columnA + runif(1, (-1/70), (1/70) ),
       columnB = columnB + runif(1, (-1/70), (1/70) ),
       columnC = columnC + runif(1, (-1/70), (1/70) )

问题是我想为所有三列生成相同的数字,但上面会创建3个不同的生成数字。 有谁知道如何将相同的runif应用于所需的所有列。

3 个答案:

答案 0 :(得分:1)

您可以先创建noise列,添加到A,B,C列然后删除它:

mutate(noise = runif(1, (-1/70), (1/70)),
       columnA = columnA + noise,
       columnB = columnB + noise,
       columnC = columnC + noise) %>% select(-noise)
df <- data.frame(A = c(1,2,3), B = c(2,3,4))
df %>% 
    mutate(noise = runif(1, (-1/70), (1/70)), 
           A = A + noise, B = B+ noise) %>% 
    select(-noise)

#         A        B
#1 1.003914 2.003914
#2 2.003914 3.003914
#3 3.003914 4.003914

答案 1 :(得分:1)

FWIW,更快,可能更清洁的基础R版本:

df <- data.frame(A = c(1,2,3), B = c(2,3,4))

并以管道和重用的功能形式,也清理临时noise向量:

modab = function(df){
  noise = runif(1,-1/70,1/70)
  df$A = df$A + noise
  df$B = df$B + noise
  df
}

答案 2 :(得分:0)

除非我误解了某些内容,否则只需创建一个变量并将其添加到您的数据中。

r <- runif(1, -1/70, 1/70)
mutate_all(df, function(x) x + r)