将 lubridate::ymd() 应用于名称中包含 "date" 的所有列

Apply lubridate::ymd() to all columns with "date" in name

我正在导入多个 csv 文件,并且在导入时想要将 lubridate::ymd() 应用于名称中包含“日期”的所有列。我收到以下错误。感谢您的帮助。

    client <- read.csv("client.csv") %>% 
       mutate(across(str_detect(., "date")), ymd())

我收到以下错误:

错误:mutate() 输入 ..1 有问题。 我..1 = across(str_detect(., "date"))。 x 必须使用有效的下标向量对列进行子集化。 x 下标类型错误 logical。 i 它必须是数字或字符。 运行 rlang::last_error() 看看哪里出错了。 另外: 警告信息: mutate() 输入 ..1 有问题。 我..1 = across(str_detect(., "date"))。 i 参数不是原子向量;胁迫

across 中的 select 列使用 tidyselect 函数。要应用其中包含特定单词的函数,您可以使用 containsmatches.

library(dplyr)
library(lubridate)

client <- read.csv("client.csv") %>% mutate(across(contains('date'), ymd))
#Using matches
#client <- read.csv("client.csv") %>% mutate(across(matches('date'), ymd))

如果我们想调用该函数,请使用 lambda 函数 (~),它在指定不同的参数方面也会提供更多的控制和灵活性

library(dplyr)
library(lubridate)
client <- read.csv("client.csv") %>%
             mutate(across(contains("date"), ~ ymd(.)))