基于观察分布/频率的连续数据分箱来决定分箱范围 r dplyr

Posted

技术标签:

【中文标题】基于观察分布/频率的连续数据分箱来决定分箱范围 r dplyr【英文标题】:Continuous data binning based on observation distribution/frequency to decide bin range r dplyr 【发布时间】:2021-08-29 00:56:51 【问题描述】:

我已经好几天没有运气扫描互联网寻求有关此问题的帮助。任何建议将不胜感激! (尤其是对 tidyverse 友好的语法)

我有一个大约 tibble。 4300 行/obs 和 320 列。一列是我的因变量,一个称为“RR”(响应比率)的连续数字列。我的目标是将 RR 值分成 10 个因子水平。稍后用于机器学习分类。

我已经用这段代码试验了 cut() 函数:

df <- era.af.Al_noNaN %>%
  rationalize() %>%
  drop_na(RR) %>%
  mutate(RR_MyQuantile = cut(RR,
                              breaks = unique(quantile(RR, probs = seq.int(0,1, by = 1 / numbers_of_bins))), 
                              include.lowest = TRUE)) 

但是我没有运气,因为我的 bin 在每个 bin 中都有相等的 n,但是,这并不能反映数据的分布。我在这里研究了一点 https://towardsdatascience.com/understanding-feature-engineering-part-1-continuous-numeric-data-da4e47099a7b 但我根本无法在R.

Here is the distribution of my RR data values grouped into classes *not what I want

【问题讨论】:

那你想要什么? 【参考方案1】:

您可以尝试hist() 来获得休息时间。它用于绘制直方图,但它还提供其他相关数据作为副作用。在下面的示例中,绘图被plot = FALSE 抑制以显示中断数据。然后,在cut() 中使用它。这应该会给你截止值,保持变量的分布。

hist(iris$Sepal.Length, breaks = 5, plot = FALSE)
# $breaks
# [1] 4 5 6 7 8
# 
# $counts
# [1] 32 57 49 12
# 
# ...<omitted>

breaks <- hist(iris$Sepal.Length, breaks = 5, plot = FALSE)$breaks

dat <- iris %>% 
  mutate(sepal_length_group = cut(Sepal.Length, breaks = breaks))

dat %>% 
  count(sepal_length_group)

#   sepal_length_group  n
# 1              (4,5] 32
# 2              (5,6] 57
# 3              (6,7] 49
# 4              (7,8] 12

【讨论】:

【参考方案2】:

谢谢!

我还尝试使用 cut() 和 count()。然后我使用 labels=FALSE 给出标签,这些标签可以在新的变异中使用,用于带有间隔组的字符名称的新列..

numbers_of_bins = 10

df <- era.af.Al_noNaN %>%
  rationalize() %>%
  drop_na(RR) %>%
  mutate(RR_MyQuantile = cut(RR,
                              breaks = unique(quantile(RR, probs = seq.int(0,1, by = 1 / numbers_of_bins))), 
                              include.lowest = TRUE))

head(df$RR_MyQuantile,10)

df %>% 
  group_by(RR_MyQuantile) %>% 
  count()

【讨论】:

以上是关于基于观察分布/频率的连续数据分箱来决定分箱范围 r dplyr的主要内容,如果未能解决你的问题,请参考以下文章

R语言将连续数值转换为自定义间隔的离散类型数据(分类型标称型)实战: 自定义间隔的数据分箱

R quirk:通过另一个向量的分箱值来规范化向量的内容

如何在 R 中绘制预分箱直方图

基于卡方分箱的评分卡建模

pandas使用cut函数基于分位数进行连续值分箱(手动计算分位数)处理后出现NaN值原因及解决

spark 特征工程 -- 分箱 Binning