我们有一个任意数据集,称为 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)
我试图完成的是更改列enter, disposal, and date从字符到日期,使用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"))
我所追求的是:mutatedplyr 需要函数来摆脱多重链接,即当我们有很多具有暗示日期的任意命名的列时?我想按名称指定列,然后应用 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"))
如这里给出的:dplyr 更改许多数据类型
作为奖励
注意clock and rolex列。使用 chron 包只需将它们转换为正确的格式,即时间而不是字符
df2 <- df %>% mutate(clock = chron(times = clock)) %>% mutate(rolex = chron(times = rolex))
正如这里建议的:在r中将字符转换为时间
现在,是否可以在没有所有链接的情况下使用相同的解决方案,特别是当我们有任意数量的具有不同命名的列等时?