2014-01-14 52 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