【问题标题】:"Transpose" data frame without for loops没有 for 循环的“转置”数据帧
【发布时间】:2017-07-03 03:23:22
【问题描述】:

我并没有真正尝试转置数据框本身。但我想要实现的是类似的东西。

我有一个(非常大的)表单数据框:

variable    country         iso     2007    2008    2009    2010    2011    2012    2014
Var1        Argentina       ARG     67.3    65      63.6    60.4    56.6    54.4    57.3
Var2        Argentina       ARG     196.785 196.918 207.487 209.596 219.171 216.852 213.124
Var1        Austria         AUT     97.3    95      63.6    60.4    56.6    54.4    57.3
Var2        Austria         AUT     296.785 396.918 207.487 209.596 219.171 216.852 213.124

等等许多变量、年份和国家。

我想得到它的形式:

country iso year Var1 Var2
Argentina ARG 2007 67.3 196.785
Argentina ARG 2008 65 196.918
.
.
Austria AUT 2007 97.3 296.785
Austria AUT 2008 95 396.918

等等..

是否有任何干净的方法可以做到这一点而不诉诸 for 循环等??

我认为 dplyr merge 函数必须有一些变体可以完成此操作,但我似乎找不到任何东西。

【问题讨论】:

    标签: r matrix dataframe tidyr


    【解决方案1】:

    tidyr 可以为您做到这一点。使用gatherspread。学好这两个是很值得的,看看例子:

    library(tidyr)
    
    df1 <- data.frame(
        variable = c("Var1", "Var2", "Var1", "Var2"),
         country = c("Argentina", "Argentina", "Austria", "Austria"),
             iso = c("ARG", "ARG", "AUT", "AUT"),
           X2007 = c(67.3, 196.785, 97.3, 296.785),
           X2008 = c(65, 196.918, 95, 396.918),
           X2009 = c(63.6, 207.487, 63.6, 207.487),
           X2010 = c(60.4, 209.596, 60.4, 209.596),
           X2011 = c(56.6, 219.171, 56.6, 219.171),
           X2012 = c(54.4, 216.852, 54.4, 216.852),
           X2014 = c(57.3, 213.124, 57.3, 213.12)
    )
    
    df1 %>% gather(Year, Value, -c(variable:iso)) %>% 
          spread(variable, Value)
    

    阅读小插图以更好地了解其工作原理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-16
      • 2022-12-18
      • 2021-09-26
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多