随机化数据框列表中的列

时间:2015-11-20 13:54:25

标签: r data-manipulation

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

我开始使用我的原始数据框的副本来创建数据框列表:

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

2 个答案:

答案 0 :(得分:1)

您可以尝试以下操作:

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

答案 1 :(得分:0)

您是否有理由在单独的列表中使用它们?

这将为您提供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))
}

`