在R语言中为数值列添加第5与第95百分位数的实现方法
问题解决:在dplyr summarize across中添加5%和95%百分位数
你的代码问题出在quantile的调用方式上:缺少要计算的向量参数,也没有给quantile传递na.rm = TRUE参数。以下是修正后的几种可行写法:
方法1:使用匿名函数(~)调用quantile
这种写法简洁直观,用.x指代当前处理的数值列:
mtcars %>% summarize(across(where(is.numeric), list(median = ~median(.x, na.rm = TRUE), mean = ~mean(.x, na.rm = TRUE), q5 = ~quantile(.x, probs = 0.05, na.rm = TRUE), q95 = ~quantile(.x, probs = 0.95, na.rm = TRUE)), .names = "{.col}_{.fn}"))
{.col}_{.fn}会自动生成清晰的列名(比如mpg_median、mpg_q5),避免默认的序号后缀。
方法2:使用显式匿名函数
如果不习惯~语法,可以用标准的匿名函数写法:
mtcars %>% summarize(across(where(is.numeric), list(median = function(x) median(x, na.rm = TRUE), mean = function(x) mean(x, na.rm = TRUE), q5 = function(x) quantile(x, 0.05, na.rm = TRUE), q95 = function(x) quantile(x, 0.95, na.rm = TRUE)), .names = "{.col}_{.fn}"))
关键修正点
- 调用
quantile时必须指定第一个参数(要计算的向量,即.x或x) - 给每个统计函数单独传递
na.rm = TRUE参数(across的.na.rm参数是用来跳过全NA的列,不是传递给内部函数的)
内容的提问来源于stack exchange,提问作者wander Hi
相关产品推荐
相关产品推荐

