【问题标题】:Renaming Columns in R According to Repeating Sequence根据重复序列重命名R中的列
【发布时间】:2019-04-07 00:24:56
【问题描述】:

我在 R 中有一个宽数据框,我正在尝试重命名列名,以便我可以将其重塑为长格式。

目前,数据的结构如下:

long lat V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 ... V477

我想重命名这些列,以便它们是:

long lat Jan_1979 Feb_1979 Mar_1979 Apr_1979 ... Sept_2018

我不知道该怎么做。任何帮助将不胜感激。

【问题讨论】:

    标签: r dplyr rename reshape2


    【解决方案1】:

    我们可以使用expand.grid 来获取所有月份的年份组合:

    name_combn <- expand.grid(month.abb, 1979:2018)[1:477,]
    names(df) <- c('long', 'lat', paste(name_combn$Var1, name_combn$Var2, sep = "_"))
    

    输出:

    > head(name_combn, 20)
       Var1 Var2
    1   Jan 1979
    2   Feb 1979
    3   Mar 1979
    4   Apr 1979
    5   May 1979
    6   Jun 1979
    7   Jul 1979
    8   Aug 1979
    9   Sep 1979
    10  Oct 1979
    11  Nov 1979
    12  Dec 1979
    13  Jan 1980
    14  Feb 1980
    15  Mar 1980
    16  Apr 1980
    17  May 1980
    18  Jun 1980
    19  Jul 1980
    20  Aug 1980
    

    【讨论】:

      【解决方案2】:

      有多种方法可以做到这一点。

      base R 中的一种方法是使用seq 以您需要的格式创建每月日期。例如,您可以通过

      创建从 1979-01-01 开始的前 10 个序列
      format(seq(as.Date('1979-01-01'), length.out = 10, by = "1 month"), "%b_%Y")
      
      #[1] "Jan_1979" "Feb_1979" "Mar_1979" "Apr_1979" "May_1979" "Jun_1979" "Jul_1979"
      #[8] "Aug_1979" "Sep_1979" "Oct_1979"
      

      对于你的情况,这应该可以工作

      names(df)[3:479] <- format(seq(as.Date('1979-01-01'), 
                                 length.out = 477, by = "1 month"), "%b_%Y")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-21
        • 2015-06-27
        • 2015-10-10
        • 1970-01-01
        • 1970-01-01
        • 2021-03-16
        • 2021-01-23
        相关资源
        最近更新 更多