"Transpose" 没有 for 循环的数据框
"Transpose" data frame without for loops
我并不是真的要转置数据框本身。但我想要实现的是类似的东西。
我有一个(非常大的)数据框,格式为:
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
函数的一些变体可以完成这个,但我似乎找不到任何东西。
tidyr 可以为您做这件事。使用 gather
和 spread
。学好这两个还是很值得的,看例子:
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)
阅读插图以更好地了解它的工作原理。
我并不是真的要转置数据框本身。但我想要实现的是类似的东西。
我有一个(非常大的)数据框,格式为:
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
函数的一些变体可以完成这个,但我似乎找不到任何东西。
tidyr 可以为您做这件事。使用 gather
和 spread
。学好这两个还是很值得的,看例子:
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)
阅读插图以更好地了解它的工作原理。