【问题标题】:How to add colums to a blank data frame columns by columns in R?如何按R中的列将列添加到空白数据框列?
【发布时间】:2014-01-14 11:08:05
【问题描述】:

我尝试创建一个 data.fame,然后在这个 data.frame 中添加一些列。

我尝试了以下代码,但它不起作用:

test.dim <- as.data.frame(matrix(nrow=0, ncol=4))
names <- c("A", "B", "C", "D")
colnames(test.dim) <- names

for (i in 1:4) {
    name = names[i]
    # do some calculations, at last get another data.fame named x.data

    mean.data <- apply(x.data, 1, mean)
    test.dim[, name] <- mean.data

}

【问题讨论】:

  • 请适当地格式化您的代码。而x.data这个对象又是从哪里来的呢?
  • 可能有更好的方法来做你需要做的事情。你能用文字和一个小例子解释你真正想要解决的问题吗?
  • 致阿南达:其实我有两个表,我从第一个表中提取一些信息,然后用得到的信息来选择第二个表中的列,然后计算所选块的均值.最后,我使用从第一个表中获得的信息作为列名创建了一个平均值表。我希望你很清楚。这就是为什么我创建一个空白的 data.frame,然后逐列添加值
  • 听起来你最好用merge

标签: r dataframe add multiple-columns


【解决方案1】:

通常已经有一个 data.frame(称为 df)并通过调用 df$newColName = valuesdf[,newColNames] = frame_of_values 简单地添加帧。

您的问题表明您将值的创建与将它们放入数据框中(我不建议这样做)分开。但如果你真的想从零行零列开始,这里有一些选择:

colnamesToAdd = LETTERS[1:4]
test.dim = data.frame(  matrix(rep(NA),length(colnamesToAdd),nrow=1)   )
colnames(test.dim) = colnamesToAdd
test.dim = test.dim[-1,]

另一种选择:

colnamesToAdd = LETTERS[1:4]
test.dim = data.frame("USELESS" = NA)
test.dim[,colnamesToAdd] = NA
test.dim = test.dim[-1,-1]

如果您希望在表格中添加平均值并针对每个因素重复此操作:

library(data.table); 
test.dim = data.table("FACTOR" = sample(letters[1:4],100,replace=TRUE), "VALUE" = runif(100), "MEAN" = NA)
means = test.dim[,list(AVG=mean(VALUE)),by="FACTOR"]
# without data.table: by(test.dim$VALUE, test.dim$FACTOR, mean)
for(x in 1:nrow(means)) { test.dim$MEAN[test.dim$FACTOR==means$FACTOR[x]] = means$AVG[x] } # normally I would use the foreach package instead of this last for loop

【讨论】:

  • 非常感谢 Hans, 第一个选项很好。我改变了我的想法,逐列添加它,我使用 for 单独添加每个值。所以我解决了。非常感谢您如何定义空白 data.frame。
猜你喜欢
  • 2014-12-28
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
  • 2015-06-29
  • 2017-11-27
  • 1970-01-01
  • 2020-08-02
相关资源
最近更新 更多