根据重复序列重命名 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
我在 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
以您需要的格式创建月度日期。因此,例如,您可以通过
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