R定义空白数据框的尺寸

我试图从一个数据集的多个子集收集一些数据,并需要创build一个数据框来收集结果。 我的问题是不知道如何创build一个定义数量的列的空白数据框,而实际上没有数据放入它。

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) } 

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

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

 collect1 <- data.frame(id = character(0), max1 = numeric(0), max2 = numeric(0)) 

但是,如果你知道有多less行,你应该创build一个数据框,并开始一行。

NA的数据框会起作用吗? 就像是:

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

如果您需要更具体的数据types,那么可能更喜欢: NA_integer_NA_real_NA_complex_NA_character_而不只是NA ,这是逻辑的

还有一些可能更具体的NAs是:

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

模式可以是任何types。 看?vector

你可以做一些事情:

 N <- 10 collect1 <- data.frame(id = integer(N), max1 = numeric(N), min1 = numeric(N)) 

现在要小心,在其余的代码中,你忘记使用行索引来逐行填充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) } 

最后,我会说有很多方法可以做你正在努力完成的事情,有些会更有效率,并且使用更less的打字。 你可以看看aggregate函数,或从plyr包中获得plyr

您可以使用NULL而不是NA 。 这创build了一个真正的空数据框。

 df = data.frame(matrix("", ncol = 3, nrow = 10) 

这可能有助于在另一个论坛给出的解决scheme,基本上是:即

 Cols <- paste("A", 1:5, sep="") DF <- read.table(textConnection(""), col.names = Cols,colClasses = "character") > str(DF) 'data.frame': 0 obs. of 5 variables: $ A1: chr $ A2: chr $ A3: chr $ A4: chr $ A5: chr 

您可以更改colClasses以适应您的需求。

原始链接是https://stat.ethz.ch/pipermail/r-help/2008-August/169966.html

创build任意大小的dataframe的更一般的方法是从相同维度的matrix创buildn乘1的dataframe。 然后,你可以立即删除第一行:

 > v <- data.frame(matrix(NA, nrow=1, ncol=10)) > v <- v[-1, , drop=FALSE] > v [1] X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 <0 rows> (or 0-length row.names) 

如果只有列名可用,如:

 cnms <- c("Nam1","Nam2","Nam3") 

要用上面的variables名创build一个空的数据框,首先创build一个data.frame对象:

 emptydf <- data.frame() 

现在调用每一列的第零个元素,从而用给定的variables名创build一个空的数据框:

 for( i in 1:length(cnms)){ emptydf[0,eval(cnms[i])] } 

seq_along可能有助于找出数据文件中有多less行,并创build一个具有所需行数的data.frame

  listdf <- data.frame(ID=seq_along(df), var1=seq_along(df), var2=seq_along(df)) 

这里的一个解决scheme,如果你想要一个空的数据框与定义的行数和NO列:

 df = data.frame(matrix(NA, ncol=1, nrow=10)[-1]