You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 01:21:36