首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向R中的空数据框添加列

向R中的空数据框添加列
EN

Stack Overflow用户
提问于 2014-11-01 06:04:03
回答 2查看 29.6K关注 0票数 24

我在Stack Overflow上进行了广泛的搜索,但没有找到这个问题的答案。

假设我有一个数据帧a。

我定义:

代码语言:javascript
复制
a <- NULL
a <- as.data.frame(a)

如果我想在这个数据框中添加一列,如下所示:

代码语言:javascript
复制
a$col1 <- c(1,2,3)

我得到以下错误:

代码语言:javascript
复制
Error in `$<-.data.frame`(`*tmp*`, "a", value = c(1, 2, 3)) : 
    replacement has 3 rows, data has 0

为什么行维度是固定的,而列不是?

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

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

代码语言:javascript
复制
a <- NULL
a$col1 <- c(1,2,3)
a <- as.data.frame(a)
EN

回答 2

Stack Overflow用户

发布于 2014-11-01 08:14:18

行的维度不是固定的,但是data.frames被存储为约束为具有相同长度的向量的列表。不能将col1添加到a,因为col1有三个值(行),而a有零,从而打破了约束。默认情况下,当您尝试通过添加比data.frame更长的列来扩展data.frame的维度时,R不会自动生动化值。第二个示例之所以有效,是因为col1是data.frame中唯一的向量,所以data.frame被初始化为三行。

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

代码语言:javascript
复制
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)))))
}

这将使用NA填充缺少的值。您可以像这样使用它:cbind.all( df, a )

票数 12
EN

Stack Overflow用户

发布于 2017-11-29 07:30:02

您也可以这样做,我从多个文件中读取数据,获取所需的列,并将其存储在数据帧中。我检查dataframe中是否有任何内容,如果没有,则创建一个新的,而不是得到关于不匹配的行数的错误:

代码语言:javascript
复制
readCounts = data.frame()

for(f in names(files)){
    d = read.table(files[f], header=T, as.is=T)
    d2 = round(data.frame(d$NumReads))
    colnames(d2) = f
    if(ncol(readCounts) == 0){
        readCounts = d2
        rownames(readCounts) = d$Name
    } else{
        readCounts = cbind(readCounts, d2)
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26684072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档