2013-02-20 116 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