【问题标题】:Mutate_if or mutate_at in dplyr with Datesdplyr 中的 Mutate_if 或 mutate_at 与日期
【发布时间】:2019-09-24 12:05:25
【问题描述】:

我有一个超过 100 列的数据集,但是假设我有一个看起来像这样的数据集

dput(tib)
structure(list(f_1 = c("A", "O", "AC", "AC", "AC", "O", "A", "AC", "O", "O"), f_2 = c("New", "New", 
"New", "New", "Renewal", "Renewal", "New", "Renewal", "New", 
"New"), first_dt = c("07-MAY-18", "25-JUL-16", "09-JUN-18", "22-APR-19", 
"03-MAR-19", "10-OCT-16", "08-APR-19", "27-FEB-17", "02-MAY-16", 
"26-MAY-15"), second_dt = c(NA, "27-JUN-16", NA, "18-APR-19", 
"27-FEB-19", "06-OCT-16", "04-APR-19", "27-FEB-17", "25-APR-16", 
NA), third_dt = c("04-APR-16", "21-JUL-16", "05-JUN-18", "18-APR-19", 
"27-FEB-19", "06-OCT-16", "04-APR-19", "27-FEB-17", "25-APR-16", 
"19-MAY-15"), fourth_dt = c("05-FEB-15", "25-JAN-16", "05-JUN-18", 
"10-OCT-18", "08-JAN-19", "02-SEP-16", "24-OCT-18", "29-SEP-16", 
"27-JAN-15", "14-MAY-15"), fifth_dt = structure(c(1459728000, 
1469059200, 1528156800, 1555545600, 1551225600, 1475712000, 1554336000, 
1488153600, 1461542400, 1431993600), class = c("POSIXct", "POSIXt"
), tzone = "UTC"), sex = c("M", "M", "F", "F", "M", "F", "F", 
"F", "F", "F")), row.names = c(NA, -10L), class = c("tbl_df", 
"tbl", "data.frame"))

大多数日期 (ends_with(dt)) 列是字符串,但我想将它们转换为日期。我尝试了mutate_at,但收到了以下信息:

tib %>% mutate_at(vars(ends_with("dt")), funs(parse_date_time(.))) %>% glimpse()
Error in mutate_impl(.data, dots) : 
  Evaluation error: argument "orders" is missing, with no default.

对导致此错误的原因有什么想法吗?我应该使用不同的mutate 函数吗?

【问题讨论】:

  • 其中一列已经是datetime 类(fifth_dt)。所以你可能需要从mutate_attib %>% mutate_at(3:6, list(~ parse_date_time(., "%d-%m-%y")))中删除它

标签: r dplyr lubridate


【解决方案1】:

正如 akrun 所指出的,其中一列已经采用 dttm 格式。一旦该列被忽略,以下代码对我有用:

tib %>% 
  select(-fifth_dt) %>% 
  mutate_at(vars(ends_with("dt")), parse_date_time, orders = "%d-%m-%y")

【讨论】:

  • 作为一个选项,您可以先使用mutatefifth_dt 转换为字符串,然后再使用mutate_at
【解决方案2】:

funs 已弃用。到位,可以使用list

library(dplyr)
tib %>% 
   mutate_at(3:6, list(~ parse_date_time(., "%d-%m-%y")))

【讨论】:

    猜你喜欢
    • 2020-06-23
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    相关资源
    最近更新 更多