本身并不是真的试图转置数据帧。但我想要实现的是类似的东西。
我有一个(非常大的)格式的数据框:
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
依旧......
有没有干净的方法来做这个而不诉诸于循环等。??
我认为必须有一些dplyr merge
函数可以实现这一点,但我似乎找不到任何东西。
答案 0 :(得分:2)
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)
阅读小插图以更好地处理它的工作原理。