我想拥有一个数据帧的多个副本,但每次都有一个新的变量随机化。我的目标背后是使用一个变量的随机值进行多次分析迭代。
我开始使用我的原始数据框的副本来创建数据框列表:
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"]]))})
但我的变量不是随机的。
多个问题与我的相似,但没有帮助我解决问题:
答案 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))
}
`