将多个字符列转换为 as.Date 和 R 中的时间

Convert multiple character columns to as.Date and time in R

我们有一个任意数据集,称为 df:

enter <- c("2017-01-01", "2018-02-02", "2018-03-03") 
guest <- c("Foxtrot","Uniform","Charlie","Kilo")
disposal <- c("2017-01-05", "2018-02-05", "2018-03-09") 
rating <- c("60","50","50")
date <- c("2017-04-10", "2018-04-15", "2018-04-20")
clock <- c("16:02:00", "17:02:00", "18:02:00")
rolex <- c("20:10:00", "20:49:00", "17:44:00") 
df <- data.frame(enter,guest,disposal,rating,date,clock,rolex, stringsAsFactors = F)

我试图完成的是更改列 enterdisposaldate 从字符到日期,使用 dplyr 包。 所以,我想出了以下内容,只需将它们链接在一起即可:

library(dplyr)
library(chron)
df2 <- df %>% mutate(enter = as.Date(enter, format = "%Y-%m-%d")) 
%>% mutate(disposal = as.Date(disposal, format = "%Y-%m-%d")) 
%>% mutate(date = as.Date(date, format = "%Y-%m-%d"))

我所追求的是:dplyr 需要哪个 mutate 函数来摆脱多重链接,即当我们有很多带有暗示日期的任意命名的列时?我想按名称指定列,然后应用 as.Date 函数将它们从字符更改为日期。

一些不适用于本案例的不同操作的解决方案:

1:

2:

3: change multiple character columns to date

例如,我尝试过,但没有成功:

df2 <- df %>% mutate_at(data = df, each_of(c(enter, disposal, date)) = as.Date(format = "%Y-%m-%d"))

此处给出:dplyr change many data types

作为奖励

注意 clockrolex 列。使用 chron 包简单地将它们转换为正确的格式,即时间而不是字符

df2 <- df %>% mutate(clock = chron(times = clock)) %>% mutate(rolex = chron(times = rolex))

如这里所建议的那样: convert character to time in r

现在,是否可以在没有所有链接的情况下使用相同的解决方案,尤其是当我们有任意数量的具有不同命名等的列时?

您只需调整 mutate_at 的参数。 as.Date 的任何附加参数都指定为 mutate_at.

的参数
df2 <- df %>% mutate_at(vars(enter,disposal,date), as.Date, format="%Y-%m-%d")

你问题的第二部分有类似的解决方案。

df2 <- df2 %>% mutate_at(vars(clock, rolex), function(x) chron(times. = x))