我们有一个任意数据集,称为 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包将 Enter、Disposal和Date列从字符更改为日期。因此,我想出了以下内容,只需将其链接在一起:
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 函数将它们从字符更改为日期。
针对不同操作的一些不适用于本例的解决方案:
2:使用 lubridate 和 dplyr 将多列转换为日期
例如,我尝试过,但没有成功:
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 中的时间
现在,是否可以在没有所有链接的情况下使用相同的解决方案,特别是当我们有任意数量的具有不同命名的列等时?
您只需要调整 的参数即可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)