问题描述
我正在尝试为其他程序生成大量测试数据。 在 R Studio 中工作时,我导入了一个 SPSS sav 文件,该文件包含 73 个变量以及使用 Haven 作为数据框“td”记录在其中的值和标签。这给了我需要使用的所有变量名称。然后我删除所有现有数据。
td <- td[0,]
然后我通过加载索引 ID 生成 10,000 个测试数据行
td$ID <- 12340000:12349999
到目前为止一切顺利。
我有一个名为 ThismanyRows <- 10000
的常量
我在名为 BinaryVariables
的变量中有大量列标题名称
以及一个名为 CheckedOrNot <- c(NA,1)
这就是问题所在:
td[,BinaryVariables] <- sample(x = CheckedOrNot,size= ThismanyRows,replace = TRUE)
确实用数据填充所有列。但它的所有数据都完全相同,这不是我想要的。 我希望示例函数针对每一列运行,而不是针对每列中的每个值运行。
即使
Fillbinary <- function () {sample(x = CheckedOrNot,replace = TRUE)}
和
td <- lapply(td[,BinaryVariables],Fillbinary)
生成:FUN(X[[i]],...) 中的错误:未使用的参数 (X[[i]])
到目前为止,我还没有弄清楚如何将每一列作为一列处理并将示例函数应用于它。
非常感谢任何帮助。
解决方法
让我们先为示例生成一些假数据:
BinaryVariables <- c("v1","v2","v3")
CheckedOrNot <- c(NA,1)
ThismanyRows <- 10
td <- data.frame(ID=1:10)
问题是您正在生成 10 个值并将其输入以替换 3 * 10 个值。
有几种方法可以解决这个问题。您最初可能会想,好吧,我将生成 10 个值 3 次,如下所示:
td[BinaryVariables] <- replicate(length(BinaryVariables),sample(x = CheckedOrNot,size=ThismanyRows,replace=TRUE),simplify=FALSE)
这会工作得很好,但是如果您可以sample
一次并填充一次,为什么要sample
3次?
td[BinaryVariables] <- sample(x = CheckedOrNot,size=ThismanyRows*length(BinaryVariables),replace = TRUE)
而且 (well,a) 结果显示每一列的值都不一样:
# TD v1 v2 v3
#1 1 NA 1 1
#2 2 NA 1 1
#3 3 NA 1 NA
#4 4 NA 1 NA
#5 5 1 NA 1
#6 6 NA 1 1
#7 7 1 NA 1
#8 8 1 1 NA
#9 9 1 NA NA
#10 10 1 NA NA