我们有一个任意数据集,称为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)我试图完成的是使用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"))我想要的是:在dplyr中需要哪个突变函数才能摆脱多重链接,也就是说,当我们有大量带有任意名称的列时,这些列意味着日期?我想按名称指定列,然后应用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
例如,我试过了,但没有运气:
df2 <- df %>% mutate_at(data = df, each_of(c(enter, disposal, date)) = as.Date(format = "%Y-%m-%d"))如下所示:dplyr change many data types
作为一种奖励
注意时钟和劳力士列。使用chron包只需将它们转换成正确的格式,即时间而不是字符。
df2 <- df %>% mutate(clock = chron(times = clock)) %>% mutate(rolex = chron(times = rolex))如下所示:convert character to time in r
现在,在没有所有链接的情况下,是否可以使用相同的解决方案,特别是当我们有任意数量的具有不同名称的列时?
发布于 2018-02-21 14:41:42
您只需调整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))https://stackoverflow.com/questions/48908466
复制相似问题