【发布时间】:2015-05-28 10:38:42
【问题描述】:
我在 R 中有一个表格,看起来像(下面只是一个示例):
| | 15 | 17 | 18 | 22 | 25 | 26 | 27 | 29 |
|-------|----|----|----|----|----|----|----|----|
| 10000 | 1 | 2 | 1 | 2 | 4 | 3 | 5 | 2 |
| 20000 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 30000 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 40000 | 0 | 0 | 0 | 1 | 2 | 3 | 6 | 3 |
| 50000 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
| 60000 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
行是收入水平,列是年龄水平。我实际上是在创建这张表,通过卡方检验来查看年龄是否与收入相关。表中的数字是出现次数,例如我的数据集中有 2 个 17 岁的人,收入为 10000。
R中“num”类型的年龄和收入水平都是连续的。
我想基本上合并年龄列,以便我得到一个包含收入为 10k 且年龄在 15-25 岁、25-35 岁等之间的每个人的表格,所以我最终得到的列要少得多。
还要注意 colnames(tbl) = "15","17", "18", not "Age" - 我没有为我的列和行定义一个总体名称。
我注意到this answer 做了类似的事情,但不确定如何应用它,因为我的列没有名称,例如“mpg”(在链接的情况下)。
有什么想法吗?
【问题讨论】:
-
我认为您可以将宽格式转换为长格式(如果是表格对象,可能通过
as.data.frame或如果是矩阵,则可能通过melt)并使用cut创建分组列基于长格式的列,获取基于此的计数,然后使用来自reshape2的dcast将其重新整形为宽格式。顺便说一句,你有table对象还是matrix -
我有一个
table对象作为str(tbl)的输出是:“'table' int [1:7, 1:42]”等。 -
无论如何,您在下面发布了一个解决方案,我认为它应该可以工作。如果不转成
mat <- as.matrix(tbl)再试一下。
标签: r aggregate summarization cbind group-summaries