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

如何在R语言中计算数据框中各变量每个观测值的百分位数?

计算数据框中各变量观测值的百分位数

首先先将你提供的矩阵转换为数据框(也可直接对矩阵操作):

# 还原数据结构
df_matrix <- structure(c(2, 4, 5, 6, 8, 1, 2, 4, 6, 67, 8, 11), dim = c(6L, 2L), dimnames = list(NULL, c("lo", "li")))
# 转为数据框(可选,矩阵也可直接处理)
df <- as.data.frame(df_matrix)

方法1:Base R 实现

利用apply()结合经验累积分布函数ecdf(),逐列计算每个观测值的百分位数(即小于等于该值的观测值占该列总数的百分比):

# 定义计算单变量百分位数的函数
get_percentile <- function(col) {
  ecdf_func <- ecdf(col)
  ecdf_func(col) * 100
}

# 对每列应用函数,得到各观测值的百分位数
result_base <- cbind(df, apply(df, 2, get_percentile))
colnames(result_base) <- c("lo", "li", "lo_pct", "li_pct")
print(result_base)

运行结果示例:

lo li    lo_pct    li_pct
1  2  2  33.33333  16.66667
2  4  4  50.00000  33.33333
3  5  6  66.66667  50.00000
4  6 67  83.33333 100.00000
5  8  8 100.00000  66.66667
6  1 11  16.66667  83.33333

方法2:tidyverse(dplyr)风格实现

如果习惯使用tidyverse工具链,可以用mutate()配合across()批量处理所有列:

library(dplyr)

result_dplyr <- df %>%
  mutate(
    across(
      everything(), 
      ~ ecdf(.)(.) * 100, 
      .names = "{.col}_pct"  # 自动生成带后缀的列名
    )
  )

print(result_dplyr)

说明

这里计算的是经验百分位数,核心逻辑是:对于某列的每个观测值,计算该列中小于等于它的观测值数量占总数量的比例,再乘以100得到百分位数,这是最常用的“每个观测值在自身变量中的相对位置”计算方式。

内容的提问来源于stack exchange,提问作者lola

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:45:59