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

Renaming Columns in R According to Repeating Sequence

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

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

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

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

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