使用dplyr和tidyr将R中的多元数据转换为聚合表

使用dplyr和tidyr将R中的多元数据转换为聚合表,r,data.table,dplyr,tidyr,R,Data.table,Dplyr,Tidyr,我正在使用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,

我正在使用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

你可以检查一下。基本上这是一个重塑问题,但您需要先按分割列分割数据帧,然后使用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(数据集,年份+组~division,value.var=“count”)当然可以。很高兴你找到了自己的路。