R 数据框用随机样本数据填充命名列

时间:2021-07-29 03:55:32

标签: r dataframe random multiple-columns test-data

我正在尝试为其他程序生成大量测试数据。 在 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, size= ThismanyRows, replace = TRUE)}

td <- lapply(td[,BinaryVariables],Fillbinary) 生成:FUN(X[[i]], ...) 中的错误:未使用的参数 (X[[i]])

到目前为止,我还没有弄清楚如何将每一列作为一列处理并将示例函数应用于它。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

让我们先为示例生成一些假数据:

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
相关问题