I have the following problem
How to apply the function dmy
only to those columns of my dataframe df
, which contain "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
If I want to apply the function to all columns of dataframe, the code is the following:
library(lubridate)
apply(df, 2, dmy)
This causes an error, because dmy
is not applicable to all columns.
How to transform this code, to apply dmy
not to all of the columns, but only to columns, which contain the word "Date" inside their name?
Additional question: can I also use regular expressions in choosing column names inside the apply function? How to do it?
CodePudding user response:
you can use the dplyr
package to apply a function to several columns:
library(dplyr)
library(lubridate)
df %>%
mutate(across(matches("Date"), dmy))
Alternatively, you can use apply
but you have to select the relevant columns first. This can be done using grep
:
df[, grep("Date", colnames(df))] <- apply(df[, grep("Date", colnames(df))], 2, dmy)