【发布时间】:2016-02-08 18:12:39
【问题描述】:
我想使用 dplyr 的 cut_number 之类的东西将一列拆分为具有大致相同观察次数的存储桶,其中我的数据集采用紧凑形式,其中每一行都有一个权重(观察次数)。
示例数据框:
df <- data.frame(
x=c(18,17,18.5,20,20.5,24,24.4,18.3,31,34,39,20,19,34,23),
weight=c(1,10,3,6,19,20,34,66,2,3,1,6,9,15,21)
)
如果每行有一个 x 观察值,我会简单地使用 df$bucket <- cut_number(df$x,3) 将 x 分割成 3 个具有大致相同数量观察值的桶。但是我如何考虑到每一行都用一些观察值加权的事实呢?我想避免将每一行拆分为 weight 行,因为原始数据框已经有数百万行。
【问题讨论】:
-
您能否详细说明您希望如何制作这些水桶?存储桶 1 是否应该包含 x1-xn、存储桶 2 xn+1-xm 等?或者每个桶是否应该包含接近 sum(weight)/number_of_buckets x's?
-
后者:每个桶应该包含尽可能接近 sum(weight)/number_of_buckets x 的值。
-
这似乎是一个创建间隔的简单问题,但我不清楚所需的输出。如果你的数据是
df <- data.frame(x=1:6, weight=c(1,1,1,1,4,1)),你是把桶画成123|455|556还是123|45|6(|表示桶边界)? -
在我的应用程序中,每一行都应该分配一个唯一的桶。所以在你建议的两个分区中,前者是不可接受的,我会选择后者。
-
我的回答对你有用吗?