随机化数据框列表中的列

Randomizing a column in a list of dataframe

我想要一个数据帧的多个副本,但每次都有一个新的随机变量。我的objective背后是对一个变量的随机化值进行多次迭代分析。

我首先做了一个数据框列表,其中包含我原始数据框的副本:

a <- c(1, 2, 3, 4, 5)
b <- c(45, 34, 50, 100, 64)
test <- data.frame(a, b)
test2 <- lapply(1:2,function(x) test) #List of 2 dataframe, identical to test

我知道变换和采样,以随机化列的值:

test1 <- transform(test, a = sample(a))

我只是找不到如何将它应用于整个数据帧列表。我试过这个:

test3<- lapply(test2,function(i) sample(i[["a"]]))

但是我丢失了其他变量。还有这个:

test3 <- lapply(test2,function(i) {transform(i, i[["a"]]==sample(i[["a"]]))})

但是我的变量不是随机的。

多个问题与我的相似,但没有帮助我解决问题:

Adding columns to each in a list of dataframes

Add a column in a list of data frames

您可以尝试以下方法:

lapply(test2, function(df) {df$a <- sample(df$a); df})

或者,使用 transform:

lapply(test2, function(df) transform(df, a = sample(a)))

或者只是

lapply(test2, transform, a = sample(a))

您需要将它们放在单独的列表中是有原因的吗?

这将为您提供 10 列不同列中的 a 随机样本,然后您可以循环遍历这些列以进行进一步分析。

a <- c(1, 2, 3, 4, 5)
b <- c(45, 34, 50, 100, 64)
test <- data.frame(a, b)

for(i in 3:12){
test[,i] <- transform(sample(a))
}

`