将函数应用于 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)
我有以下问题
如何仅将函数 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)