2013-02-20 76 views
2

我對國家層面數據的大數據集是在國家年的格式,並顯示在下面的表格工作(有刪節爲便於):我如何去移調/切割列轉換爲行中的R

Country  Variable of Interest Year 
Bolivia  5      1990 
Bolivia  6      1991 
Bolivia  7      1992 
Cambodia 8      1990 
Cambodia 9      1991 
Cambodia 10     1992 
Russia  11     1990 
Russia  12     1991 
Russia  13     1992 

由於與同事合作,我該如何獲取數據到這個形式?:

Country 1990 1991 1992 
Bolivia 5  6  7 
Cambodia 8  9  10 
Russia  11  12 13 

我,使用R版本2.15.2和使用庫WDI輪詢世界銀行的信息。我將代碼附加到目前爲止只適用於單個國家/地區的代碼。當我嘗試爲所有國家/地區執行此操作時,我會粘貼代碼。任何幫助將不勝感激。謝謝。

library(WDI) 
x<-WDI(country="US",indicator="NY.GDP.MKTP.CD",start = 1980, end=2012) 
a<-as.matrix(x$country) 
b<-x$year 
x<-as.data.frame(t(x)) 
colnames(x)<-b 
x<-x[-1:-2,][-2,] 
x<-x[,order(ncol(x):1] 
a<-a[1,] 
rownames(x)<-a 
x 

當我嘗試改變爲所有國家時,更改將WDI中的參數「US」更改爲「全部」。

我很欣賞任何和所有幫助!先謝謝你!

回答

4

使用reshape2包:

假設你data.framedf(我改變了第二列名Interest):

require(reshape2) 
# use dcast as: 
dcast(df, Country ~ Year, value.var="Interest") 


# Country 1990 1991 1992 
# 1 Bolivia 5 6 7 
# 2 Cambodia 8 9 10 
# 3 Russia 11 12 13 
+0

感謝您的幫助! – Bataman 2013-02-20 23:15:15

1
reshape(dfrm, timevar="Year", direction="wide", idvar='Country') 
#------------- 
    Country Variable_of_Interest.1990 Variable_of_Interest.1991 Variable_of_Interest.1992 
1 Bolivia       5       6       7 
4 Cambodia       8       9      10 
7 Russia      11      12      13 

如果你想解決的名稱根據自己的喜好,然後setNames可能有用:

setNames(reshape(dfrm, timevar="Year", direction="wide", idvar='Country'), 
      c("Country", unique(dfrm$Year)) ) 
#-------------- 
    Country 1990 1991 1992 
1 Bolivia 5 6 7 
4 Cambodia 8 9 10 
7 Russia 11 12 13 

請注意,帶引號的列名除非引用,否則不是真正有效的。

+0

感謝您的幫助......這真是太棒了!正是我需要的! – Bataman 2013-02-20 23:00:58