【发布时间】:2020-01-24 10:20:48
【问题描述】:
我想使用多个函数按组汇总一个 df。复制数据:
library(dplyr)
df1 <- data.frame(a=c('a', 'a', 'b', 'b', 'c', 'c'), b=c(1,NA,3,2,2,1), c=c(1,3,5,5,2,4))
其中一个是自定义函数,当每个组 (df1$a) 中的 max(df1$c) 时,它会询问 df1$b 的值。当结果为NA 时,它应该返回df1$b 的值,作为df1$c 的第二高值。以下作品:
namax <- function(x,y) ifelse(is.na(y[x==max(x)] & length(x)>1),
y[x==sort(x,partial=length(x)-1)[length(x)-1]], y[x==max(x)])
然后我尝试总结df1 使用:
df2 <- df1 %>%
dplyr::group_by(a) %>%
summarise(meanc = mean(c),
maxc = namax(c,b))
返回以下内容,因为对于 df$a == 'b',df1$c 的最大值对于 df1$b 的不同值出现两次。
错误:列“maxc”的长度必须为 1(汇总值),而不是 2
是否有一个优雅的解决方案,通过它 dplyr 返回两个值,同时执行另一个对 summarise() 的调用(例如,通过在对 group_by 的调用中添加 do())?在我的应用案例中,我尝试对summarise 运行几个不同的调用,除了使用namax 函数的调用。
【问题讨论】: