对于数据框如下
id<-c(1,1,2,3,3,2)
p<-c(10,0,22,34,0,0)
df<-data.frame(id,p)
Run Code Online (Sandbox Code Playgroud)
我需要一个总结表
id p
1 10
2 22
3 34
Run Code Online (Sandbox Code Playgroud)
这实际上是每个id的p的总和.我可以用'dcast'来获得这个吗?
有几种方法可以获得所需的结果,这里有几个:您可以使用split和sapply:
df <- data.frame(id, p)
sapply(split(df, df$id), function(x) sum(x$p))
1 2 3
10 22 34
Run Code Online (Sandbox Code Playgroud)
或者用以下内容短得多tapply:
tapply(p, id, sum)
1 2 3
10 22 34
Run Code Online (Sandbox Code Playgroud)
或者您可以ddply从plyr包中使用:
library(plyr)
ddply(df, .(id), function(x) sum(x$p))
id V1
1 1 10
2 2 22
3 3 34
Run Code Online (Sandbox Code Playgroud)
最后你还可以使用by:
by(p, id, sum)
id: 1
[1] 10
------------------------------------------------------------
id: 2
[1] 22
------------------------------------------------------------
id: 3
[1] 34
Run Code Online (Sandbox Code Playgroud)