我如何 bin/bucket a data.frame by birthyears

How can I bin/bucket a data.frame by birthyears

我有一个包含三列的 data.frame:令牌、出生年份和联系人数量。出生年份从 1934 年到 2020 年不等,我不希望使用 2000-2005、2006-2010 等 5 年组,以便稍后可视化每个年龄组的联系人数量。

我已经找到 cut 函数,例如 this:

# set up cut-off values 
breaks <- c(0,2,4,6,8,10,12,14,16,18,20)
# specify interval/bin labels
tags <- c("[0-2)","[2-4)", "[4-6)", "[6-8)", "[8-10)", "[10-12)","[12-14)", "[14-16)","[16-18)", "[18-20)")
# bucketing values into bins
group_tags <- cut(v$MeanEducation, 
                  breaks=breaks, 
                  include.lowest=TRUE, 
                  right=FALSE, 
                  labels=tags)

但是在这个例子中,我必须手动设置中断向量和标签。

是否有自动化的解决方案?就像在下一个比我的数据框中的最小值低 5 个可分年份开始第一个桶。模拟在顶端。

提前致谢!

您定义的tags默认由cut函数创建,您无需手动添加。此外,您可以使用 seq 创建中断序列,并使用 paste 以编程方式生成标签。

#Generate data
set.seed(123)
x <- sample(10)
x
#[1]  3 10  2  8  6  9  1  7  5  4
#Create breaks
breaks <- seq(0, 10, 2)
#Create labels
labels <- paste(head(breaks, -1), tail(breaks, -1), sep = '-')

#Without labels
cut(x, breaks)

#[1] (2,4]  (8,10] (0,2]  (6,8]  (4,6]  (8,10] (0,2]  (6,8]  (4,6]  (2,4] 
#Levels: (0,2] (2,4] (4,6] (6,8] (8,10]

#With labels
cut(x, breaks, labels)
#[1] 2-4  8-10 0-2  6-8  4-6  8-10 0-2  6-8  4-6  2-4 
#Levels: 0-2 2-4 4-6 6-8 8-10