2014-02-10 171 views
0

我有在數據幀中4列總和/平均值不同列

a <- data.frame(a=c(1,2,3,4), b=c(4,5,6,7), c=c(7,6,5,4), d=c(8,4,3,2)) 

我要平均前兩列和最後兩列以獲得一個數據幀與平均相同NROWS的兩列

5 15 
7 10 
9 8 
11 6 
+0

可能重複這裏http://stackoverflow.com/questions/5559467/how-to-merge-two-columns-in- r-with-a-specific-symbol看看它可能會做你需要的東西 –

回答

1

要重現你的輸出(即總和,並不代表):

前兩列和最後兩列

預期輸出的

library(plyr) 
ddply(a, .(), summarise, first=a+b, second=c+d)[,-1] 

它產生:

first second 
1  5  15 
2  7  10 
3  9  8 
4 11  6 

爲了data.frame與平均值:

ddply(a, .(), summarise, first=(a+b)/2, second=(c+d)/2)[,-1] 

輸出是:

first second 
1 2.5 7.5 
2 3.5 5.0 
3 4.5 4.0 
4 5.5 3.0 

如果你不知道列的名字代碼像這樣修改:

ddply(a, .(), summarise, first=a[,1]+a[,2], second=a[,3]+a[,4])[,-1] 

在這裏按順序訪問列。或者,您可以在ddply()之前運行names(a) <- letters[1:4]

ddply是非常靈活的函數,您可以指定分組變量作爲第二個參數並獲得分組結果。但是,如果情況如問題一樣簡單,你可以直接打電話summarise

summarise(a, first=a+b, second=c+d)     # if you know columns' names 
summarise(a, first=a[,1]+a[,2], second=a[,3]+a[,4]) # if you don't know columns' names 
+0

謝謝,這很有效。但我沒有任何列名稱。我以上述爲例。我只知道添加前兩列和後兩列。我將如何傳遞這些信息? – user1631306

+0

只需在'ddply'之前運行'names(a)< - letters [1:4]'來指定名稱 – redmode

+0

@ user1631306,請參閱更新 – redmode