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]