我们说我有三列: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应用于所需的所有列。
答案 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)