R定义空数据帧的维度

scr*_*Owl 47 r

我试图从数据集的多个子集中收集一些数据,并需要创建一个数据框来收集结果.我的问题是不知道如何创建具有已定义列数的空数据框,而实际上没有数据放入其中.

collect1 <- c()  ## i'd like to create empty df w/ 3 columns: `id`, `max1` and `min1`

for(i in 1:10){
collect1$id <- i
ss1 <- subset(df1, df1$id == i)
collect1$max1 <- max(ss1$value)
collect1$min1 <- min(ss1$value)
}
Run Code Online (Sandbox Code Playgroud)

我觉得这个问题非常愚蠢(我几乎觉得我之前已经问过它但是找不到它)但是非常感谢任何帮助.

aat*_*lob 112

一个数据帧是否NA可行?就像是:

data.frame(matrix(NA, nrow = 2, ncol = 3))

如果您需要更具体的关于数据类型,那么可能更喜欢:NA_integer_,NA_real_,NA_complex_,或NA_character_而不只是NA这是合乎逻辑

其他可能更具体的东西NAs是:

data.frame(matrix(vector(mode = 'numeric',length = 6), nrow = 2, ncol = 3))

模式可以是任何类型.看到?vector

  • 这是我通常这样做的方式. (2认同)

Hon*_*Ooi 25

只需创建一个空向量的数据框:

collect1 <- data.frame(id = character(0), max1 = numeric(0), max2 = numeric(0))
Run Code Online (Sandbox Code Playgroud)

但是如果你事先知道你将要拥有多少行,那么你应该创建一个包含许多行的数据框.

  • 但这并不会创建一个空数据框:它是一个单行数据框,恰好是所有缺失值. (5认同)
  • 我通常会使用NA:`data.frame(a = NA,b = NA,C = NA)`. (3认同)

flo*_*del 11

你可以这样做:

N <- 10
collect1 <- data.frame(id   = integer(N),
                       max1 = numeric(N),
                       min1 = numeric(N))
Run Code Online (Sandbox Code Playgroud)

现在要小心,在其余代码中,您忘记使用行索引逐行填充data.frame.它应该是:

for(i in seq_len(N)){
   collect1$id[i] <- i
   ss1 <- subset(df1, df1$id == i)
   collect1$max1[i] <- max(ss1$value)
   collect1$min1[i] <- min(ss1$value)
}
Run Code Online (Sandbox Code Playgroud)

最后,我会说有很多选择可以做你想要完成的事情,有些会更有效率并且使用更少的打字.例如,您可以查看aggregate函数或ddplyplyr包中查看.


小智 9

您可以使用NULL而不是NA.这会创建一个真正空的数据框.


小智 8

如果您想要一个具有定义的行数和无列数的空数据框,这里有一个解决方案:

df = data.frame(matrix(NA, ncol=1, nrow=10)[-1]
Run Code Online (Sandbox Code Playgroud)

  • [-1] 之前缺少 `)` (2认同)

Ama*_*eet 5

df = data.frame(matrix("", ncol = 3, nrow = 10)  
Run Code Online (Sandbox Code Playgroud)

  • 在创建df时更好地使用"NA"而不是"".否则所有列都是一个级别的因子. (2认同)