2017-07-03 37 views
1

我并不是真的想要调换一个数据框,本身。但我试图达到的是类似的东西。没有for循环的“移调”数据框

我有以下形式的(非常大的)数据帧:

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函数可以做到这一点的变化,但我似乎无法找到任何东西。

回答

2

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) 

读出暗角,以得到它是如何工作更好地处理。

+0

这工作得很好,谢谢! – jackson5