根据重复序列重命名R中的列

时间:2018-11-02 18:24:31

标签: r dplyr rename reshape2

我在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

我不确定该怎么做。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以通过多种方式执行此操作。

以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")

答案 1 :(得分:0)

我们可以使用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