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

Wok*_*kel 2 r date converters

我们有一个任意数据集,称为 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)
Run Code Online (Sandbox Code Playgroud)

我试图完成的是使用dplyr包将 EnterDisposalDate列从字符更改为日期。因此,我想出了以下内容,只需将其链接在一起:

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"))
Run Code Online (Sandbox Code Playgroud)

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

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

1:将data.frame中的列转换为日期

2:使用 lubridate 和 dplyr 将多列转换为日期

3:将多个字符列更改为日期

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

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

如此处所示:dplyr 更改许多数据类型

作为奖励

注意时钟劳力士栏。使用 chron 包只需将它们转换为正确的格式,即时间而不是字符

df2 <- df %>% mutate(clock = chron(times = clock)) %>% mutate(rolex = chron(times = rolex))
Run Code Online (Sandbox Code Playgroud)

正如这里建议的: 将字符转换为 r 中的时间

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

qdr*_*ead 5

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

df2 <- df %>% mutate_at(vars(enter,disposal,date), as.Date, format="%Y-%m-%d")
Run Code Online (Sandbox Code Playgroud)

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

df2 <- df2 %>% mutate_at(vars(clock, rolex), function(x) chron(times. = x))
Run Code Online (Sandbox Code Playgroud)