2014-01-14 54 views
0

我尝试创建一个data.fame,然后在这个data.frame中添加一些列。如何将列添加到R列中的空白数据框列?

我尝试下面的代码,但它不工作:

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 

} 
+0

请适当地格式化您的代码。对象'x.data'从哪里来? –

+2

可能有更好的方法来做你需要做的事情。你能用文字和一个小例子来解释你实际上想要解决什么问题。 – A5C1D2H2I1M1N2O1R2T1

+0

对Ananda来说:事实上,我有两个表,我从第一个表中提取一些信息,然后使用get选择第二个表中的列,然后计算所选块的平均值。最后,我使用第一个表中获得的信息作为列名创建一个表的平均值。我希望你很清楚。这就是为什么我创建一个空白data.frame,然后按列添加值列 – boyang

回答

0

通常人们会已经有了一个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 
+0

非常感谢汉斯,第一个选择是好的。我改变我的想法,逐列添加它,我用它来单独添加每个值。所以我解决它。非常感谢您如何定义空白数据。 – boyang