将函数应用于 R 中的多列

Apply a function to multiple columns in R

我有以下问题 如何仅将函数 dmy 应用于我的数据框 df 的那些列,其中包含 "Date"?

x  Cat  Date1        y   AnotherDate
1  as   31.12.2020   56  04.04.2004
2  ab   31.12.2019   78  05.09.2010
3  bs   30.09.2021   26  25.11.2012
4  bd   20.08.2021   33  31.01.2022

如果我想将函数应用到dataframe的所有列,代码如下:

library(lubridate)
apply(df, 2, dmy)

这会导致错误,因为 dmy 不适用于所有列。 如何转换此代码,不将 dmy 应用于所有列,而仅应用于名称中包含单词“Date”的列?

附加问题:我是否也可以在应用函数中使用正则表达式来选择列名?怎么做?

您可以使用 dplyr 包将一个函数应用于多个列:

library(dplyr)
library(lubridate)

df %>%
  mutate(across(matches("Date"), dmy))

或者,您可以使用 apply,但您必须先 select 相关列。这可以使用 grep:

来完成
df[, grep("Date", colnames(df))] <- apply(df[, grep("Date", colnames(df))], 2, dmy)