我们有一个名为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
现在,在没有所有链接的情况下,同样的解决方案是可用的,特别是当我们有任意数量的具有不同命名的列等时。?
答案 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))