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

时间:2018-02-21 14:31:43

标签: r date converter

我们有一个名为df:

的任意数据集
   ID Group Age
1  1     a 0.5
2  1     b 1.0
3  2     c 0.5
4  2     d 1.0
5  3     e 0.0

我尝试完成的是使用 dplyr更改输入处置日期列,从字符到日期包。 所以,我想出了以下内容,只需将它链接在一起:

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)

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

不适用于此情况的不同操作的一些解决方案:

1:convert column in data.frame to date

2:convert multiple columns to dates with lubridate and dplyr

3:change multiple character columns to 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"))

如下所示:dplyr change many data types

作为奖金

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

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

如此处所示: convert character to time in r

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

1 个答案:

答案 0 :(得分:1)

您只需调整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))