创建函数以格式化数据框中的列

时间:2017-07-25 20:11:57

标签: r function dplyr

我有一个约会时间,我正试图剥离和清理。我不确定是否有开箱即用的东西。我做了一些搜索,但找不到任何东西。日期格式为..

2017-01-01T01:36:17.000Z

可重复的例子:

StartDate <- c("2017-01-01T01:36:17.000Z", "2017-01-01T01:36:17.000Z")
Num <- c(1,2)
DataFrame <- data_frame(Num, StartDate)

我通过以下方式修复了它

require(dplyr)
require(tidyr)
require(lubridate)

DataFrame <- DataFrame %>%
   separate(StartDate , into = c("NewDate", "tail"), sep = "T") %>%
   mutate(NewDate= ymd(NewDate)) %>%
   select(-tail)

我想做的是把它变成一个函数,这样我就可以在需要的时候管它。

我想出了以下内容,但未能让它发挥作用。我也尝试过separate_和mutate_的变体。但仍然没有运气。

ztime <- function(df, datecol, newcol) {
  library(lubridate)
  library(tidyr)
  library(dplyr)


  df <- df %>%
    separate_(datecol, into = c(newcol, "extra"), sep = "T") #%>%
    mutate_(newcol = ymd(newcol)) %>%
    select(-extra)

}

希望获得一些见解!提前谢谢

3 个答案:

答案 0 :(得分:3)

为什么不从lubridate致电as_date

dater <- function(x){
  lubridate::as_date(x)
}
dater("2017-01-01T01:36:17.000Z")
[1] "2017-01-01"

最佳

科林

答案 1 :(得分:1)

有一个改变游戏规则的包! anytime

library(anytime)

NewDataFrame <- DataFrame %>% 
  mutate(NewDate = anytime(StartDate))

我总是惊讶于它清理和解释多少

答案 2 :(得分:0)

您只需使用

即可
ztime <- function(df, datecol, newcol) {
  df[[newcol]] <- lubridate::ymd_hms(df[[datecol]])
}