使用dplyr的summarize函数按Site分组计算统计量报错求助
报错原因
代码存在语法结构错误:across() 函数需要将要应用的转换函数列表作为自身的第二个参数,但你错误地把函数列表写到了across()的括号外部,变成了summarise()的第二个独立参数。summarise()要求每个输入参数返回的结果长度要么是1(每组返回一个统计值),要么和分组行数一致,你传入的长度为4的函数列表不符合要求,因此触发报错。
可正常运行的代码
方案1:匹配原有逻辑(先把NA替换为0再计算)
library(dplyr) data %>% replace(is.na(.), 0) %>% group_by(Site) %>% dplyr::summarise( across( c(OS_days, ster_days, pct_ster, first_ster_days, tot_bev_days, pct_bev, first_bev_days, SPD), # 给统计函数命名,生成的列名会自动带后缀更易读 list(mean = mean, median = median, min = min, max = max) ) )
方案2:更推荐的na.rm参数处理(无需修改原始值)
不需要提前将NA替换为0,直接在统计函数中加入na.rm = TRUE参数即可忽略缺失值计算,避免NA转0对统计结果的干扰:
library(dplyr) data %>% group_by(Site) %>% dplyr::summarise( across( c(OS_days, ster_days, pct_ster, first_ster_days, tot_bev_days, pct_bev, first_bev_days, SPD), list( mean = ~mean(.x, na.rm = TRUE), median = ~median(.x, na.rm = TRUE), min = ~min(.x, na.rm = TRUE), max = ~max(.x, na.rm = TRUE) ) ) )
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

