2016-10-10 61 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