mydf看起来像这样;
id<-c(1,1,2,2,3,3,4,4)
type<-c("a","a","a","b","a","a","a","b")
total<-c(1.1,1.2,2.1,2.3,3.4,3.6,4.2,4.3)
mydf<-data.frame(id,type,total)
我想使用聚合来计算type = b的总和,但要生成一个包含所有id号的df。所以宁可使用
mydf.ag<-aggregate(total~id, sum, data=mydf)
我想使用像
这样的东西mydf.ag<-aggregate(total~id, sum, data=mydf[mydf$type=="b",])
但是这只返回一个带有type = b实例的df。理想情况下,我希望mydf.ag为id&#39; s 1和3包含零。所以mydf.ag应该看起来像
mydf.ag<-data.frame(id=c(1,2,3,4), total=c(0,2.3,0,4.3))
使用聚合是理想的,但欢迎任何其他建议!
答案 0 :(得分:2)
可以使用data.table
library(data.table)
setDT(mydf)[, list(total=sum(total[type=='b'])), id]
或dplyr
library(dplyr)
mydf%>%
group_by(id) %>%
summarise(total=sum(total[type=='b']))
答案 1 :(得分:0)
或者你可以先为Total
设置type == "b"
等于零并运行你的聚合函数
mydf[mydf$type != "b", "total"] <- 0
aggregate(total~id, sum, data=mydf)