R求和数据透视表

Ali*_*vil 1 r

对于数据框如下

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'来获得这个吗?

joh*_*nes 5

有几种方法可以获得所需的结果,这里有几个:您可以使用splitsapply:

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)

或者您可以ddplyplyr包中使用:

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)