首页 > 解决方案 > 填充空数据框而不定义维度

问题描述

我很好奇是否有一种方法可以在无需定义维度的情况下填充空数据框。在我不知道最终结果会有多大的情况下,这可能对我有用。

foo <- data.frame()

for (i in 1:5){
  foo[, i] <- sample(1:10, 10, replace = TRUE)
}

这给出了错误 Error in [<-.data.frame(*tmp*, , i, value = c(1L, 7L, 9L, 9L, 6L, : replacement has 10 rows, data has 0

我知道您可以定义尺寸,它将与以下内容一起使用,但我想知道是否有替代方法您不必这样做。

foo <- data.frame(matrix(nrow = 10, ncol = 0))

标签: r

解决方案


One approach might be

foo <- data.frame()
for (i in 1:5) foo <- rbind(foo, sample(1:10, 10, replace = TRUE))

which is equivalent to

for (i in 1:5) foo[i,] <- sample(1:10, 10, replace = TRUE)

Then, transposing it, you can get what you want, i.e.

> t(foo)
      1 2 3 4 5
X.1   8 6 8 1 9
X.2   4 3 4 3 1
X.3   6 2 1 3 7
X.4  10 7 8 4 1
X.5   3 4 6 3 1
X.6   4 4 5 4 2
X.7   9 5 5 3 8
X.8   9 1 4 7 1
X.9   7 4 4 5 9
X.10  5 4 2 2 6

(As indicated, whenever feasible, you probably want to define the size and structure of foo as it makes the code much more efficient).


推荐阅读