【问题标题】:How Do I Go About Transposing/Cutting Columns into Rows in R我如何在 R 中将列转置/剪切成行
【发布时间】:2013-02-20 22:41:38
【问题描述】:

我正在处理国家级数据的大型数据集,该数据集采用国家/地区年份格式并以以下形式显示(为方便起见而进行了删节):

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”更改为“all”。

感谢您对此提供的任何帮助!先感谢您!

【问题讨论】:

    标签: r reshape reshape2


    【解决方案1】:

    使用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
    

    【讨论】:

      【解决方案2】:
       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
      

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

      【讨论】:

      • 感谢所有的帮助...这太棒了!正是我需要的!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      相关资源
      最近更新 更多