在dplyr中使用自定义函数summarise

smtd7mpg  于 2023-04-18  发布在  其他
关注(0)|答案(1)|浏览(130)

我有一个 Dataframe ,我应用了一些自定义总结逻辑(如果每组的最大值超过100,则使用最大值,否则使用每组值的平均值):

library(tidyverse)

dat <- data.frame(grp = c("a", "a", "a", "b", "b"),
           vals = c(115, 100, 101, 90, 100))

dat %>% 
  group_by(grp) %>% 
  summarise(new_val = case_when(max(vals) >= 100 ~ max(vals),
                                TRUE ~ mean(vals)))

但是,我需要重用具有不同最大截止值的自定义汇总逻辑,但又不想在汇总逻辑中一遍又一遍地进行硬编码。
以下内容不起作用:

sumFunc <- function(max_val) {
  case_when(max(vals) >= max_val ~ max(vals),
            TRUE ~ mean(vals))
}

dat %>% 
  group_by(grp) %>% 
  summarise(new_val = sumFunc(100))
hjzp0vay

hjzp0vay1#

或者这个:

sumFunc <- function(col,max_val) {
  case_when(max(col) >= max_val ~ max(col),
            TRUE ~ mean(col))
}

dat %>% 
  group_by(grp) %>% 
  summarise(new_val = sumFunc(vals,100))

  grp   new_val
  <fct>   <dbl>
1 a         115
2 b          95

相关问题