【发布时间】:2017-01-14 16:32:47
【问题描述】:
我在 df 中对行求和时遇到了一些问题,我想对每个组内的 BAD 和 UGLY 行求和(如果它们存在)!
group = c(seq(1,1.4,0.2),rep(seq(1.6,2,0.2),c(3,3,2)))
clas=c(rep("BAD",3),rep(c("BAD","GOOD","UGLY"),2),rep(c("BAD","GOOD"),1))
n=c(rep(1000,3),96,180,715,190,184,26,124,874)
df <- data.frame(group,clas,n)
> df
# group clas n
#1 1.0 BAD 1000
#2 1.2 BAD 1000
#3 1.4 BAD 1000
#4 1.6 BAD 96
#5 1.6 GOOD 180
#6 1.6 UGLY 715
#7 1.8 BAD 190
#8 1.8 GOOD 184
#9 1.8 UGLY 26
#10 2.0 BAD 124
#11 2.0 GOOD 874
我试过这个,但由于我的逻辑不好,它当然没用!
library(dplyr)
df %>%
group_by(group) %>%
mutate(sum = ifelse(all(clas=="BAD"),n,ifelse(with(clas=="BAD"&clas=="UGLY"),n["BAD"]+n["UGLY"],"NA")))
错误:“逻辑”类型的“环境”参数无效
如果代码可以修复,预期的输出,
> df
# group clas n sum
#1 1.0 BAD 1000 1000
#2 1.2 BAD 1000 1000
#3 1.4 BAD 1000 1000
#4 1.6 BAD 96 811
#5 1.6 GOOD 180 811
#6 1.6 UGLY 715 811
#7 1.8 BAD 190 216
#8 1.8 GOOD 184 216
#9 1.8 UGLY 26 216
#10 2.0 BAD 124 124
#11 2.0 GOOD 874 124
谢谢!
【问题讨论】:
-
df %>% group_by(group) %>% mutate(sum = sum(n)- sum(n[clas=="GOOD"]))或sum(n[clas=="BAD"|clas=="UGLY"]) -
@zx8754 不。没必要!