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存储为受限制为具有相同长度的向量列表.您不能添加col1到a,因为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 )