如何使用格式日期重命名多个列名称?

How to rename multiple columns names with format date?

提问人:Damien Dotta 提问时间:11/16/2023 更新时间:11/16/2023 访问量:38

问:

我想创建一个 rename_col_df() 函数来重命名 data.frame 中的所有列,除了第一个列 (CODE_S)。

下面是重现该问题的示例:

df <- data.frame(
  CODE_S = c(1, 2, 3),
  COL2 = c(10, 20, 30),
  COL3 = c(15, 25, 35)
)
colnames(df) <- c("CODE_S", "01/10/2023", "01/11/2023")

在此示例中,我只有 2 个日期列,但在实际用例中,我有几十个日期列。

预期结果:名为“CODE_S”、“2023-10-01”、“2023-11-01”的列。

我正在考虑使用这样的东西,但我无法将其放入函数中:

names(df) <- c("CODE_S",format(as.Date("01/11/2023", format = "%d/%m/%Y"), "%Y-%m-%d"))
R 函数 日期

评论

0赞 zx8754 11/16/2023
也许只是将 / 替换为 - : ,或者用于获取有效名称。gsub("/", "-", c("CODE_S", "01/10/2023", "01/11/2023"), fixed = TRUE)make.names
0赞 Damien Dotta 11/16/2023
我希望它无需在代码中编写例如“01/11/2023”即可工作
0赞 Friede 11/16/2023
如果只有第一列名称不同,则可以使用 。colnames(df)[-1] <- gsub("/", "-", colnames(df)[-1L])
0赞 zx8754 11/16/2023
这只是一个例子,没有必要手动输入列名,使用列名,然后使用gsub,请参阅下面的答案。

答:

1赞 Julian 11/16/2023 #1

使用您的想法的一种方式和:rename_with

library(dplyr)
df |> 
  rename_with(~format(as.Date(., format = "%d/%m/%Y"), "%Y-%m-%d"), -"CODE_S")

输出

  CODE_S 2023-10-01 2023-11-01
1      1         10         15
2      2         20         25
3      3         30         35
1赞 user2974951 11/16/2023 #2

尝试

> colnames(df)[-1]=as.character(as.Date(colnames(df)[-1],format="%d/%m/%Y"))
  CODE_S 2023-10-01 2023-11-01
1      1         10         15
2      2         20         25
3      3         30         35

列名不能是日期。

1赞 zx8754 11/16/2023 #3

使用 gsub

colnames(df) <- gsub("/", "-", colnames(df), fixed = TRUE)

或者 make.names 具有有效的名称:

colnames(df) <- make.names(colnames(df))