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

如何获取R中ntile分组对应的mean_price截断值?

获取ntile分组对应的mean_price截断值

问题说明

你已经用ntile(mean_price, 5)把房价数据分成了5个分组,现在需要提取这5个分组对应的mean_price截断边界值。之前尝试用quantile但参数设置不对,以下是正确的解决方法。

原始数据预览

# A tibble: 52 × 3
   provincia     mean_price number_properties
   <chr>              <dbl>             <int>
 1 A Coruña         179833.              2508
 2 Albacete         148584.              1311
 3 Alicante         418148.             22676
 4 Almería          142338.              3902
 5 Araba - Álava    243705.               786

已用分组代码

df %>% 
  mutate(
    bins = ntile(mean_price, 5)
  )

之前尝试的错误代码

x = df %>% 
  mutate(
    bins = ntile(mean_price, 52),
    bins_cutpoints = quantile(mean_price, probs = seq(0, 1, length.out = 52), na.rm = TRUE)
  )

解决方案

方法1:直接获取5分位数截断点

ntile(...,5)本质是把数据按5分位数分组,所以直接用quantile函数传入对应的分位数概率即可,代码如下:

# 计算5分组的截断值(包含最小值和最大值,共6个点对应5个区间)
cutpoints <- quantile(df$mean_price, probs = seq(0, 1, 1/5), na.rm = TRUE)
cutpoints

运行后会得到类似这样的结果:

0%       20%       40%       60%       80%      100% 
113856.40 132623.63 160838.24 197388.05 340663.44 749037.54

方法2:将截断值与分组关联验证

如果想把每个分组和对应的截断值对应起来,可以先分组再统计边界,同时结合quantile的结果:

# 先添加分组,再统计每个组的价格范围,最后关联截断值
df_with_bins <- df %>%
  mutate(bins = ntile(mean_price, 5)) %>%
  group_by(bins) %>%
  summarize(
    group_min = min(mean_price),
    group_max = max(mean_price),
    .groups = "drop"
  ) %>%
  mutate(
    lower_cut = cutpoints[-length(cutpoints)],
    upper_cut = cutpoints[-1]
  )

df_with_bins

关键说明

  • ntile会尽量把数据均匀分成n个组,当总观测数不能被n整除时,前几个组会多1个观测
  • quantile(..., probs = seq(0,1,1/n))生成的分位数点,正好对应ntile分组的边界,两者逻辑一致

完整数据

df <- structure(list(provincia = c("A Coruña", "Albacete", "Alicante", 
"Almería", "Araba - Álava", "Asturias", "Badajoz", "Barcelona", 
"Bizkaia", "Burgos", "Cantabria", "Castellón", "Ceuta", "Ciudad Real", 
"Cuenca", "Cáceres", "Cádiz", "Córdoba", "Gipuzkoa", "Girona", 
"Granada", "Guadalajara", "Huelva", "Huesca", "Illes Balears", 
"Jaén", "La Rioja", "Las Palmas", "León", "Lleida", "Lugo", 
"Madrid", "Melilla", "Murcia", "Málaga", "Navarra", "Ourense", 
"Palencia", "Pontevedra", "Salamanca", "Santa Cruz de Tenerife", 
"Segovia", "Sevilla", "Soria", "Tarragona", "Teruel", "Toledo", 
"Valencia", "Valladolid", "Zamora", "Zaragoza", "Ávila"), mean_price = c(179833.167862839, 
148583.87109077, 418148.151437643, 142337.792926704, 243704.750636132, 
149179.732438607, 147802.894486692, 462813.775190776, 286461.604484305, 
134635.540239044, 201214.437926878, 139819.15323646, 204318.181818182, 
113856.401715511, 116992.998609179, 143137.441025641, 251270.65520481, 
166586.746650426, 340663.440746753, 365733.360551724, 219325.194605466, 
173221.569037657, 142430.992912371, 141754.603535354, 749037.540922619, 
131396.292428198, 160838.235963581, 656553.777123633, 140312.919506463, 
160485.155614973, 129787.667711599, 433665.652781242, 234306.12244898, 
188635.237652749, 687127.622056842, 197388.050991501, 137829.640394089, 
123450.853813559, 230344.604904632, 159999.046077894, 328912.419004007, 
184829.536144578, 180692.511036468, 155759.235955056, 193651.956693536, 
128909.006756757, 132623.629553967, 177825.529404212, 165240.297002725, 
116820.125531915, 164934.932635983, 124977.724215247), number_properties = c(2508L, 
1311L, 22676L, 3902L, 786L, 3502L, 2104L, 35906L, 3345L, 1255L, 
2489L, 4542L, 44L, 1399L, 719L, 1170L, 5322L, 5747L, 1232L, 7250L, 
16906L, 956L, 1552L, 396L, 5376L, 1915L, 1318L, 2378L, 1702L, 
1870L, 638L, 16036L, 49L, 7856L, 15587L, 706L, 1421L, 472L, 2569L, 
1823L, 3494L, 498L, 6252L, 89L, 6327L, 296L, 2937L, 15576L, 1468L, 
470L, 2390L, 446L)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-52L))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 06:09:19