【问题标题】:Transforming multivariate data in R to an aggregated table using dplyr and tidyr [closed]使用 dplyr 和 tidyr 将 R 中的多变量数据转换为聚合表 [关闭]
【发布时间】:2016-12-19 17:27:05
【问题描述】:

我正在使用 dplyr 和 tidyr 汇总和汇总一些多变量数据。如何以如下表格形式呈现数据?

数据集:

year, division, group, count
2016, utensils, forks, 10
2016, utensils, spoons, 5
2016, utensils, knives, 20
2015, utensils, spoons, 4
2015, utensils, knives, 15
2015, utensils, forks, 11
2016, tools, hammer, 10
2016, tools, wrench, 5
2016, tools, awe, 20
2015, tools, hammer, 4
2015, tools, wrench, 15
2015, tools, awe 11

我想提供这样的信息:

          2016       2015
        Utensils  Utensils

Forks   count      count
Spoons  count      count
Knives  count      count

        2016      2015
        Tools    Tools

Hammer   count   count
Wrench   count   count 
Awe      count   count

【问题讨论】:

  • 如果我不知道为什么我被否决,很难变得更好
  • 您希望结果是每个元素都有唯一划分的数据框列表吗?
  • 请-我想通过除法将数据分开,单独的数据框就可以了

标签: r data.table dplyr tidyr


【解决方案1】:

你可以检查一下。基本上这是一个重塑问题,但您需要先按 division 列拆分数据框,然后使用 dcast 转换每个子集:

library(reshape2)
lapply(split(df, df$division), function(s) dcast(group ~ year + division, data = s, value.var = "count"))

#$tools
#   group 2015_tools 2016_tools
#1    awe         11         20
#2 hammer          4         10
#3 wrench         15          5

#$utensils
#   group 2015_utensils 2016_utensils
#1  forks            11            10
#2 kinves            15            20
#3 spoons             4             5

或者由于每个子数据框只包含一个唯一的分区,您可以将其从列名中删除,而无需添加 dcast 公式,因为它不会添加额外的信息:

lapply(split(df, df$division), function(s) dcast(group ~ year, data = s, value.var = "count"))

#$tools
#   group 2015 2016
#1    awe   11   20
#2 hammer    4   10
#3 wrench   15    5

#$utensils
#   group 2015 2016
#1  forks   11   10
#2 kinves   15   20
#3 spoons    4    5

【讨论】:

  • 非常感谢您教别人钓鱼。我最后只需要: dcast(dataset, year+group~division, value.var = "count")
  • 当然。很高兴你找到了自己的路。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 2019-08-20
相关资源
最近更新 更多