首页 > 解决方案 > R中是否存在将连续变量分类为每组相等数量的观察值的函数?

问题描述

我有一个 2319 行数据框df;我想对连续变量进行排序var并分成指定数量的组,每组的观察数相等(或尽可能接近)。我看过一个类似的帖子,其中推荐了cut2()from Hmisc,但它并不总是每组提供相同数量的观察结果。例如,我使用 cut2()

df$Group <- as.numeric(cut2(df$var, g = 10))

var Group
1415 1
1004 1
1285 1
2099 2
2119 2
2427 4
...

table(df$Group)
  1   2   3   4   5   6   7   8   9  10 
232 232 241 223 233 246 219 243 226 224

是否有人使用/编写了不依赖于变量的基本分布(例如var)的东西,而是依赖于数据中的观察数和指定的组数?我确实有非独特的价值观。

我想要的是更多数量的观察,例如:

table(df$Group)
  1   2   3   4   5   6   7   8   9  10 
232 232 231 233 231 233 232 231 231 233

标签: rsortingindexing

解决方案


cut/cut2和其他函数依赖于数据的分布来创建组。如果您想要或多或少相等数量的观察,一种选择是使用rep.

library(dplyr)

n <- 10

df %>%
  arrange(var) %>%
  mutate(Group = cummax(rep(seq_len(n), each = n()/n, length.out = n())))

推荐阅读