【问题标题】:How can I bin/bucket a data.frame by birthyears如何按出生年份对 data.frame 进行分类/存储
【发布时间】:2021-04-12 04:32:43
【问题描述】:

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

我已经找到了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 年的下一个可分年份开始第一个桶一样。模拟在顶端。

提前致谢!

【问题讨论】:

  • 您可以在使用 ggplot2 的绘图生成过程中设置分箱和标签。你为什么不尝试生成情节,人们可以权衡如何调整它以获得正确的输出?

标签: r dataframe data-analysis binning


【解决方案1】:

您定义的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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    相关资源
    最近更新 更多