压缩表分割行,创建宽数据

时间:2018-02-02 04:23:56

标签: r dplyr

我有以下虚拟数据

ID part 1    ID part 2     Year       Value
312          214           2013/14    123
312          214           2014/15    245
312          214           2015/16    126
442          346           2013/14    142
442          346           2014/15    975
442          346           2015/16    245

我试图将它组合起来,以便拥有广泛的数据。使用扩展函数,spread(data, Year, Value)得到一个类似于下面的表(忽略行顺序)。

ID part1     ID part2    2013/14         2014/15         2015/16
    312           214        123             NA               NA 
    442           346        142             NA               NA 
    312           214         NA            245               NA
    312           214         NA             NA              126
    442           346         NA             NA              245
    442           346         NA            975               NA

所需的输出将根据它们的ID对它们进行分组。

ID part1     ID part2    2013/14         2014/15         2015/16
    312           214        123            245              126 
    442           346        142            975              245

请注意,它已根据两部分ID收集了条款。

基本上我是在gather函数的正好相反之后。

1 个答案:

答案 0 :(得分:0)

您可以使用动词将数据分组并传播到宽屏格式。

library(tidyr)
library(dplyr)

df <- read.table(text = "
  ID1 ID2 Year    Value
  312 214 2013/14   123
  312 214 2014/15   245
  312 214 2015/16   126
  442 346 2013/14   142
  442 346 2014/15   975
  442 346 2015/16   245", header = TRUE, stringsAsFactors = FALSE)

df %>%
  group_by(ID1, ID2) %>%
  spread(Year, Value) %>%
  ungroup

# # A tibble: 2 x 5
#     ID1   ID2 `2013/14` `2014/15` `2015/16`
#   <int> <int>     <int>     <int>     <int>
# 1   312   214       123       245       126
# 2   442   346       142       975       245