将列添加到R中的空数据框

Mic*_*hal 16 row r list dataframe

我已经广泛搜索但没有在Stack Overflow上找到这个问题的答案.

假设我有一个数据框a.

我定义:

a <- NULL
a <- as.data.frame(a)
Run Code Online (Sandbox Code Playgroud)

如果我想为此数据框添加一列,如下所示:

a$col1 <- c(1,2,3)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Error in `$<-.data.frame`(`*tmp*`, "a", value = c(1, 2, 3)) : 
    replacement has 3 rows, data has 0
Run Code Online (Sandbox Code Playgroud)

为什么行维度固定但列不是?

如何更改数据框中的行数?

如果我这样做(首先将数据输入列表然后转换为df),它可以正常工作:

a <- NULL
a$col1 <- c(1,2,3)
a <- as.data.frame(a)
Run Code Online (Sandbox Code Playgroud)

ctb*_*own 10

行维度不固定,但data.frames存储为受限制为具有相同长度的向量列表.您不能添加col1a,因为col1有三个值(行)和a具有零,从而打破了约束.当您尝试通过添加比data.frame更长的列来扩展data.frame的维度时,R不会默认自动生成值.第二个示例有效的原因是它col1是data.frame中唯一的向量,因此data.frame初始化为三行.

如果要自动展开data.frame,可以使用以下函数:

cbind.all <- function (...) 
{
    nm <- list(...)
    nm <- lapply(nm, as.matrix)
    n <- max(sapply(nm, nrow))
    do.call(cbind, lapply(nm, function(x) rbind(x, matrix(, n - 
        nrow(x), ncol(x)))))
}
Run Code Online (Sandbox Code Playgroud)

这将填补缺失值NA.你会像以下一样使用它:cbind.all( df, a )