【发布时间】:2018-07-13 09:06:20
【问题描述】:
我正在尝试根据标签列分组来总结数据框。我想根据以下条件获得手段:
- 如果所有数字都是NA - 那么我想返回NA
- 如果所有数字的平均值为 1 或更低 - 我想返回 1
- 如果所有数字的平均值高于1 - 我想要组中大于1 的值的平均值
- 其余的应该是100。
设法找到了答案,现在我的代码运行良好 - is.na() 应该在第一个 ifelse() 语句中而不是 ==NA,这就是问题所在。
label <- c(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7)
sev <- c(NA,NA,NA,NA,1,0,1,1,1,NA,1,2,2,4,5,1,0,1,1,4,5)
Data2 <- data.frame(label,sev)
d <- Data2 %>%
group_by(label) %>%
summarize(sevmean = ifelse(is.na(mean(sev,na.rm=TRUE)),NA,
ifelse(mean(sev,na.rm=TRUE)<=1,1,
ifelse(mean(sev,na.rm=TRUE)>1,
mean(sev[sev>1],na.rm=TRUE),100))))
【问题讨论】:
-
可能
case_when()是您所寻找的。span> -
从未见过此功能。在为此苦苦挣扎后,终于自己找到了问题所在。第一个 ifelse() 语句中的 is.na() 而不是 ==NA 就是答案
-
谢谢@RiccardoLavelli,无论如何我都会查找它以学习新的东西并且可能非常有用!
-
如果您找到解决方案,请将其作为答案发布,它可能对其他人也有帮助。
-
@MIH:要了解为什么会这样,请查看此链接:stats.stackexchange.com/questions/5686/…
标签: r if-statement nested dplyr summarize