我如何 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
我有一个包含三列的 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