2017-07-03 7 views
1

私は実際にデータフレームを転置しようとしていません。しかし、私が達成しようとしていることは、何か似ています。多くの変数、年国のように"for transpose" 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

など ...

ループなどのために頼ることなくこれを行うための任意のきれいな方法があります。

??

これを実現できる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

関連する問題