【问题标题】:Apply lubridate::ymd() to all columns with "date" in name将 lubridate::ymd() 应用于名称中包含“日期”的所有列
【发布时间】:2021-09-26 11:11:35
【问题描述】:

我正在导入几个 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 参数不是原子向量;胁迫

【问题讨论】:

    标签: r dplyr tidyverse stringr


    【解决方案1】:

    使用 tidyselect 函数选择 across 中的列。要应用其中包含特定单词的函数,您可以使用 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))
    

    【讨论】:

      【解决方案2】:

      如果我们要调用该函数,请使用 lamdba 函数 (~),它还可以在指定不同参数方面提供更多控制和灵活性

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

      【讨论】:

        猜你喜欢
        • 2022-01-19
        • 2023-01-12
        • 1970-01-01
        • 2013-05-31
        • 1970-01-01
        • 2021-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多