我最近在此链接(Reorganizing columns by two column combination)中询问了有关R软件包tidyr,dplyr或类似程序中的数据库管理的问题。
这很有帮助,我设法完成了建议的代码,但是我用的是我要求的最终格式。
我无法达到这种格式,并且想知道如何轻松实现。
将其作为示例数据库:
Factor 1 Factor 2 Year value1 value2
A green 2016 1.9 20
A green 2015 1.9 20
A green 2015 4 30
B yellow 2015 3 10
B yellow 2016 8 11
并试图获得:
Factor 1 Factor 2 value1.2015 value1.2016 value2.2015 value2.2016
A green 5.9 1.9 50 20
B yellow 3 8 10 11
因此,将设置因子1和因子2的通用标识符,以按年份扩展数据集并汇总值1和2的通用年份。
我是tidyr,dplyr的乞gg,不能轻易做到这一点。
我已经能够按年份分散数据集:
df.spread<-df %>%
gather(value1,value2,-factor1,-factor2,-Year) %>%
unite(Year,Year, value1, sep = "") %>%
spread(Year,value2)
但是这并不能像我想要的那样将普通年份的value1相加。
答案 0 :(得分:0)
我们按'Factor1','Factor2','Year'分组,得到所有列(sum
的{{1}},然后将summarise_all
转换为'long'格式,{{ 1}}“年”,“键”列共同创建一个列,并且gather
从“长”格式变为“宽”格式
unite
这也可以通过spread
中的library(tidyverse)
df %>%
group_by(Factor1, Factor2, Year) %>%
summarise_all(sum) %>%
gather(key, value, value1:value2) %>%
unite(Year, key, Year, sep=".") %>%
spread(Year, value)
# Groups: Factor1, Factor2 [2]
# Factor1 Factor2 value1.2015 value1.2016 value2.2015 value2.2016
# <chr> <chr> <dbl> <dbl> <dbl> <dbl>
#1 A green 5.9 1.9 50 20
#2 B yellow 3 8 10 11
完成,我们可以在其中传递多个dcast
列和一个data.table
参数
value.var
fun.aggregate