R代码将列透视到行,将行透视到列

时间:2020-06-19 15:34:29

标签: r pivot tidyverse

我是RStudio的新手,我在这个问题上苦苦挣扎了2天,得出的结论是我需要帮助。

我有一个看起来像这样的数据框:

ISO  Indicator 2009  2010 2011 
ARB  Use of electricity 0.5 0.5 0.4
CSS  Population  2.5 3.5 0.5

我想做的就是

ISO Year Use of Electricity Population
ARB 2009 0.5 na
ARB 2010 0.5 na
ARB 2011 0.4 na
CSS 2009 na 2.5
CSS 2010 na 3.5
CSS 2011 na 0.5

我首先使用“聚集”功能创建Year列,然后将Year转换为数字并为值创建结果列。然后,我尝试“传播”,但数据框的类型却出现错误。 有没有办法一步一步地实现这一点,如果可以的话,我很乐意听到。 我考虑过在顶部添加一行并将其命名为Year以使用数据透视功能,但我不确定如何继续。 问题是否出在我的数据帧应转换为矩阵这一事实上?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

假设您的数据是

df <- read_table2("ISO  Indicator 2009  2010 2011
ARB  Use_of_electricity 0.5 0.5 0.4
CSS  Population  2.5 3.5 0.5")

使用dplyr / tidyr

df %>%
  pivot_longer(cols=as.character(2009:2011), names_to="Year") %>%
  pivot_wider(names_from="Indicator")

收益

# A tibble: 6 x 4
  ISO   year  Use_of_electricity Population
  <chr> <chr>              <dbl>      <dbl>
1 ARB   2009                 0.5       NA  
2 ARB   2010                 0.5       NA  
3 ARB   2011                 0.4       NA  
4 CSS   2009                NA          2.5
5 CSS   2010                NA          3.5
6 CSS   2011                NA          0.5