【问题标题】:How to spread data with r如何使用 r 传播数据
【发布时间】:2015-07-11 20:09:40
【问题描述】:

我有这样的数据

windspeed      month
1.2             Jan
2               Feb
3.5             Mar
2.6             Apr
5.9             Jun
2.5             Jul

我想得到这种数据

Jan   Feb   Mar   Apr    Jun   Jul  
1.2    2     3.5    2.6   5.9   2.5  

【问题讨论】:

标签: r dataframe reshape


【解决方案1】:

怎么样

t(unstack(DF, windspeed ~ month))

    Apr Feb Jan Jul Jun Mar
res 2.6   2 1.2 2.5 5.9 3.5

【讨论】:

    【解决方案2】:

    只是基础 R(尽管 setNames 实际上属于 stats 包):

    setNames(dat$windspeed, dat$month)
    Jan Feb Mar Apr Jun Jul 
    1.2 2.0 3.5 2.6 5.9 2.5 
    

    是的,有(有)一种方法,这里有一个:

    as.data.frame(t(setNames(dat$windspeed, dat$month)))
      Jan Feb Mar Apr Jun Jul
    1 1.2   2 3.5 2.6 5.9 2.5
    

    【讨论】:

      【解决方案3】:

      R中也有一些非常有用的包,适合reshapedata.tabletidyr等操作

      library(reshape2)
      library(data.table)
      
      dcast.data.table(melt(setDT(data), id.vars = "month"), variable ~ month)
      #   variable Apr Feb Jan Jul Jun Mar
      #1: windspeed 2.6   2 1.2 2.5 5.9 3.5
      
      library(reshape2)
      library(tidyr)
      spread(melt(data), month, value)
      
      #   variable Apr Feb Jan Jul Jun Mar
      #1 windspeed 2.6   2 1.2 2.5 5.9 3.5
      

      【讨论】:

        【解决方案4】:

        你可以试试这个:

        DF <- data.frame(windspeed=c(1.2, 2, 3.5, 2.6, 5.9, 2.5), month=c('Jan', 'Feb', 'Mar', 'Apr', 'Jun', 'Jul'))
        DF <- t(DF)
        colnames(DF) = DF[2, ]
        DF <- DF[1,]
        DF
        

        给你

         Jan   Feb   Mar   Apr   Jun   Jul 
        "1.2" "2.0" "3.5" "2.6" "5.9" "2.5"
        

        【讨论】:

          猜你喜欢
          • 2022-01-22
          • 2020-10-30
          • 1970-01-01
          • 1970-01-01
          • 2019-08-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多