【发布时间】:2016-09-27 12:18:23
【问题描述】:
假设我有一个如下所示的数据框:
year stint ID W
1 2003 1 abc 10
2 2003 2 abc 3
3 2003 1 def 16
4 2004 1 abc 15
5 2004 1 def 11
6 2004 2 def 7
我想合并数据,使其看起来像
year ID W
1 2003 abc 13
3 2003 def 16
4 2004 abc 15
5 2004 def 18
我找到了一种可以根据需要组合数据的方法,但我很确定还有更好的方法。
combinedData = unique(ddply(data, "ID", function(x) {
ddply(x, "year", function(y) {
data.frame(ID=x$ID, W=sum(y$W))
})
}))
combinedData[order(combinedData$year),]
这会产生以下输出:
year ID W
1 2003 abc 13
7 2003 def 16
4 2004 abc 15
10 2004 def 18
具体来说,我不喜欢我必须使用唯一的(否则我会在输出的数据中获得 3 次 year、ID、W 的每个唯一组合),并且我不喜欢行号不是连续的.我怎样才能更干净地做到这一点?
【问题讨论】:
-
试试
dplyr,即data %>% group_by(year, ID) %>% summarise(W= sum(W))。如果您使用的是ddply,那么ddply(data, .(year, ID), summarise, W=sum(W))