R:当行是变量且列是年时创建长数据集

时间:2014-06-06 22:34:14

标签: r reshape2 melt

我的数据如下:

  Country.Code Indicator.Code X1960 X1961 X1962 X1963 X1964 X1965
          AFG    allsi.bi_q1    NA    NA    NA    NA    NA    NA
          AFG    allsp.bi_q1    NA    NA    NA    NA    NA    NA
          AFG    allsa.bi_q1    NA    NA    NA    NA    NA    NA
          AFG    lm_ub.bi_q1    NA    NA    NA    NA    NA    NA
          AFG  allsi.gen_pop    NA    NA    NA    NA    NA    NA
          AFG  allsp.gen_pop    NA    NA    NA    NA    NA    NA

并希望看起来像这样:

  Country.Code Year  allsi.bi_q1 allsp.bi_q1 allsa.bi_q1 lm_ub.bi_q1 allsi.gen_pop allsp.gen_pop
          AFG   1960      NA        NA        NA           NA          NA            NA
          AFG   1961      NA        NA        NA           NA          NA            NA
          AFG   1962      NA        NA        NA           NA          NA            NA
          AFG   1963      NA        NA        NA           NA          NA            NA
          AFG   1964      NA        NA        NA           NA          NA            NA
          AFG   1965      NA        NA        NA           NA          NA            NA

我尝试使用melt中的reshape2,但我得到的就是这样(在使用as.numeric(substr(dataset$variable,2,5))之后)得到年变量:

  Country.Code Indicator.Code variable value year
          AFG    allsi.bi_q1    X1960    NA 1960
          AFG    allsp.bi_q1    X1960    NA 1960
          AFG    allsa.bi_q1    X1960    NA 1960
          AFG    lm_ub.bi_q1    X1960    NA 1960
          AFG  allsi.gen_pop    X1960    NA 1960
          AFG  allsp.gen_pop    X1960    NA 1960

如何让indicator.code的值成为相应年份和国家/地区的value值的列?请忽略我的例子中的NAs。

1 个答案:

答案 0 :(得分:2)

你需要在融化后使用dcast进行投射(同样来自reshape2)。

dcast(longdat, Country.Code + year ~ Indicator.Code, value.var = "value")