行组合可删除基于通用ID的NA

时间:2019-06-24 08:41:26

标签: r dplyr reshape tidyr database-management

我最近在此链接(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相加。

1 个答案:

答案 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