2016-10-10 58 views
-1

一個函數應用於分組的行我具有由如何R中

points_A = sample(1:6,6) 
points_B = sample(1:6,6) 
points_C = sample(1:6,6) 
df <- data.frame(name = gl(3,2,labels=c("Luca","Mario","Paolo")) , cbind(points_A,points_B,points_C) ) 

其中顯示作爲

name points_A points_B points_C 
1 Luca  5  2  3 
2 Luca  3  3  1 
3 Mario  1  5  2 
4 Mario  6  6  4 
5 Paolo  4  4  5 
6 Paolo  2  1  6 

我想應用功能而產生的數據幀(例如總和())到按列名稱(第1列)分組的行。

輸出應該是這樣的:

name points_A points_B points_C 
1 Luca  8  5  4 
2 Mario  7  11  6 
3 Paolo  6  5  11 

有什麼建議?

+1

'骨料(〜名,DF,總和)',或在dplyr,'df%>%group_by(name)%>%summarise_all(sum)' – alistaire

+0

'aggregate(。〜name,df,sum)'這是行得通的,但是如果我有其他列如lastname,city等,我仍然想要在數據框中,但我不想傳遞給聚合,因爲它們是另一個dat一種?有沒有一種方法可以指定哪些內容? – alevax

+0

[這解決了我以前的評論](http://stackoverflow.com/questions/15978985/how-to-aggregate-some-columns-while-keeping-other-columns-in-r) – alevax

回答

0

我喜歡data.table

library(data.table); dt<-data.table(df) ; dt[, function(column), by = group] 做這些事情作爲「列」,你還可以設置.SD獲得多個列。在你的例子中「組」將是「名字」。

0

A(相當原始)與溶液data.table

require(data.table) 
setDT(df) 
df[, lapply(.SD, sum), by = name, .SDcols = 2:4] 

    name points_A points_B points_C 
1: Luca  9  6  6 
2: Mario  5  10  11 
3: Paolo  7  5  4 

編輯: 在鹼R的原料溶液:

​​
+0

輸出不同到隨機性數據的。在下一個問題中更好地使用'set.seed'。 – snoram

+0

當然。謝謝。我只是認爲結果並不影響我所要求的結果。 – alevax