面板数据,从宽到长,多变量

Panel data, from wide to long with multiple variables

我正在努力处理具有多个变量的长格式的大量面板数据。看起来像这样

set.seed(42)

    dat_0=
      data.frame(
      c(rep('AFG',2),rep('UK',2)),
      c(rep(c('GDP','pop'),2)),
      runif(4),
      runif(4))
    colnames(dat_0)<-c('country','variable','2010','2011')

生成这样的数据框:

  country variable        2010      2011
1     AFG      GDP 0.535761290 0.7515226
2     AFG      pop 0.002272966 0.4527316
3      UK      GDP 0.608937453 0.5357900
4      UK      pop 0.836801559 0.5373767

而我trying/struggling把它强制到这个结构

    country   year        GDP      pop
1     AFG     2010 0.5357612   0.0022729
2     AFG     2011 0.7515226   0.4527316
3      UK     2010 0.6089374   0.8368015
4      UK     2011 0.5357900   0.5373767

抱歉,如果重复,我似乎正在努力 reshape/tidyr/dplyr

您需要 gather 然后 spread:

library(tidyverse)
set.seed(42)

dat_0 <- data.frame(c(rep("AFG", 2), rep("UK", 2)), c(rep(c("GDP", "pop"), 2)), runif(4), runif(4))
colnames(dat_0) <- c("country", "variable", "2010", "2011")

dat_0 %>%
  gather(year, value, `2010`, `2011`) %>%
  spread(variable, value)
#>   country year       GDP       pop
#> 1     AFG 2010 0.9148060 0.9370754
#> 2     AFG 2011 0.6417455 0.5190959
#> 3      UK 2010 0.2861395 0.8304476
#> 4      UK 2011 0.7365883 0.1346666

reprex package (v0.2.1)

于 2019-02-20 创建

看起来您可以通过混合使用 tidyverse 包中的 spreadgather 函数来解决您的问题。

编辑:实际上这个包是tidyr,它是tidyverse

的一部分

你可以分两步解决这个问题。

第一个:按年份和值收集,创建一个名为 "measurement"

的新列
> dat_1 <- dat_0 %>% gather(key="year",value="measurement","2010":"2011")
> dat_1
  country variable year measurement
1     AFG      GDP 2010   0.9148060
2     AFG      pop 2010   0.9370754
3      UK      GDP 2010   0.2861395
4      UK      pop 2010   0.8304476
5     AFG      GDP 2011   0.6417455
6     AFG      pop 2011   0.5190959
7      UK      GDP 2011   0.7365883
8      UK      pop 2011   0.1346666

第二:由你的新"variable"和"measurement"

传播
> dat_2 <- dat_1 %>% spread(key="variable",value="measurement")
> dat_2
  country year       GDP       pop
1     AFG 2010 0.9148060 0.9370754
2     AFG 2011 0.6417455 0.5190959
3      UK 2010 0.2861395 0.8304476
4      UK 2011 0.7365883 0.1346666

衷心希望这能解决您的问题。