2

我正在处理一个国家级数据的大型数据集,该数据集采用国家年格式,并以下列形式出现(为方便起见而进行了删节):

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 中的论点“美国”更改为“全部”。

我感谢任何和所有的帮助!先感谢您!

4

2 回答 2

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
于 2013-02-20T22:46:17.793 回答
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

请注意,除非引用,否则带有前导数字的列名实际上是无效的。

于 2013-02-20T22:51:41.317 回答