Я хотел бы сгруппировать строки этого набора данных по индексу, а затем суммировать строки по общему индексу - PullRequest
1 голос
/ 07 марта 2012

Я хотел бы сгруппировать строки этого набора данных по MemberID.

Это фрагмент моего набора данных "Заявки":

  MemberID    SopLos    DIH
1     54         0       1
2     55         1       2
3     56         2       3  
4     67         0       5
5     55         1       1
6     54         0       1
7     55         1       2
8     56         2       3  
9     67         0       5
10    55         1       1

Мой желаемый фрейм данных:

  MemberID    SopLos    DIH
1     54         0       1
2     54         0       1
3     55         1       1
4     55         1       2
5     55         1       1
6     55         1       2
7     56         2       3  
8     56         2       3  
9     67         0       5
10    67         0       5

Тогда я бы хотел суммировать строки по общим идентификаторам, что привело бы к следующему кадру данных

 MemberID    SopLos    DIH
1     54         0       2
2     55         4       6  
3     56         4       6  
4     67         0       10

Если бы вы могли мне помочь, я был бы очень признателен.

Ответы [ 2 ]

2 голосов
/ 07 марта 2012

Так как в данный момент у меня есть только базовые функции, вот другое решение. Предполагая, что ваши данные находятся в кадре данных с именем df:

aggregate(df[c("SopLos","DIH")],list(MemberId = df$MemberID),sum)

  MemberId SopLos DIH
1       54      0   2
2       55      4   6
3       56      4   6
4       67      0  10

Если у вас есть много переменных для суммирования или набор данных, который часто меняется, и вы не хотите вводить все имена, вы также можете попробовать:

aggregate(df[-(grep("^MemberID$",names(df)))],list(MemberId = df$MemberID),sum)
2 голосов
/ 07 марта 2012

Предполагается, что ваши данные находятся в кадре данных под названием dat:

require(plyr)
ddply(dat,.(MemberID),summarise,SopLos = sum(SopLos),DIH = sum(DIH))
  MemberID SopLos DIH
1       54      0   2
2       55      4   6
3       56      4   6
4       67      0  10
...