想到了一种使用data.table 的方法,它有点类似于您使用table 的计划,但希望它更自动化和通用。
该方法基本上是查看每个category 内的计数,计算所有类别的累积计数,并将cut 的累积总和值放入nSubsets(大约)相等大小的组中:
library(data.table)
## dummy up some data;
dt <- data.table(category = rep(1:256, sample(2:2000, 256, replace = T)))
## view couts by category;
dt[, .N, by = category]
# how many subsets do you want?;
nSubsets <- 4
## here we will assign each category value to a subset;
dt[, .(.N),
by = .(category)][order(N), .(category,
subset = cut(cumsum(N), breaks = nSubsets))]
## join above to your data;
dt[dt[, .(.N),
by = .(category)][order(N), .(category,
subset = cut(cumsum(N), breaks = nSubsets))],
subset := i.subset,
on = "category"]
dt
dt[, .N, by = subset]
现在,您的数据将有一个名为 subset 的列,该列不会因类别而异,但会将您的数据分成几乎相同大小的子集。