【问题标题】:reshaping with an embedded column and year name使用嵌入的列和年份名称进行整形
【发布时间】:2023-09-16 06:58:01
【问题描述】:

您好,我有一个数据,其中年份值嵌入在列名中,如下所示,我想将其重塑为长格式。

state<- c('MN', 'PA', 'NY')
city<-  c('Minessota', 'Pittsburgh','Newyork')
POPEST2010<- c(2899, 344,4555)
POPEST2011<- c(4444, 348,8999)
POPEST2012<- c(555, 55,77665)
df<- data.frame(state,city,  POPEST2010, POPEST2011, POPEST2012)

关于如何重塑为长格式的任何建议,以便我可以看到如下数据:

state  city           year POPEST
MN     Minessota      2010  2899
MN     Minessota      2011  4444
MN     Minessota      2012  8999

对于其他州类似有什么想法吗?非常感谢!

【问题讨论】:

    标签: r dplyr reshape reshape2


    【解决方案1】:

    使用renamegather 的解决方案

     df %>%
     rename_all(.funs = funs(gsub('POPEST', '', .))) %>%
     gather(year, POPEST, -state, -city)
    

    【讨论】:

      【解决方案2】:

      类似的:

      df %>%
      tidyr::gather(year,POPEST,matches("POPEST")) %>% mutate(year = sub("[^0-9]+","",year))
      
      #  state       city year POPEST
      #1    MN  Minessota 2010   2899
      #2    PA Pittsburgh 2010    344
      #3    NY    Newyork 2010   4555
      #4    MN  Minessota 2011   4444
      #5    PA Pittsburgh 2011    348
      #6    NY    Newyork 2011   8999
      #7    MN  Minessota 2012    555
      #8    PA Pittsburgh 2012     55
      #9    NY    Newyork 2012  77665
      

      【讨论】: