R 将字符datetime转换为datetime

R 将字符datetime转换为datetime,r,datetime,data.table,R,Datetime,Data.table,我想创建一个函数,以datetime格式转换字符datetime 此函数只包含一个参数:dataframe 日期示例:2017年6月1日11:10:51 我测试了这样的东西: character_to_date <- function(df){ for(i in which(str_detect(colnames(df),"DATE"))){ df[,i] <- as.Date(df[,i], "%d/%m/%Y %H:%M:%S") } } 我如何才能实现这一转变

我想创建一个函数,以datetime格式转换字符datetime

此函数只包含一个参数:dataframe

日期示例:2017年6月1日11:10:51

我测试了这样的东西:

character_to_date <- function(df){
  for(i in which(str_detect(colnames(df),"DATE"))){
    df[,i] <- as.Date(df[,i], "%d/%m/%Y %H:%M:%S")
  }
}
我如何才能实现这一转变

谢谢你的帮助

lubridate包中的函数mdy_hms已经可以为您执行此操作,如果您将其与dplyr包中的mutate_at结合使用,则可以为包含字符串日期的任何列执行此操作

如果希望此函数可以多次使用,可以执行以下操作:

my_func <- function(data){
  df %>% 
    mutate_at(.vars = vars(contains("DATE")), .funs = lubridate::mdy_hms)
}
由于您使用的是data.table,请尝试以下操作:

资料

代码

请记住以下几点:

我使用了tolower,因为列名可能有不同的大小写。 我在函数调用中使用了copypp,而不是仅使用pp。这是因为data.table通过引用更新。不使用此选项将直接在pp上进行更改-如果这是您想要的,这是可以的。在这种情况下,ww和pp都将引用已修改的pp。 希望这有帮助

df %>% mutate_at(.vars = vars(contains("DATE")), .funs = lubridate::mdy_hms)
my_func <- function(data){
  df %>% 
    mutate_at(.vars = vars(contains("DATE")), .funs = lubridate::mdy_hms)
}
my_func(df)
dput(head(pp))
structure(list(DaTe = structure(c(1516213800, 1516217400, 1516221000, 
                                        1516224600, 1516228200, 1516231800), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
                     degc = c(9.31, 8.37, 7.5, 6.76, 6.14, 5.58), 
                     rh = c(0.5, 0.53, 0.56, 0.57, 0.58, 0.59), 
                     mslp = c(1016.46, 1016.52, 1016.53, 1016.52, 1016.5, 1016.52), 
                     rain = c(0, 0, 0, 0, 0, 0), 
                     snow = c(0, 0, 0, 0, 0, 0), 
                     type = c("darksky", "darksky","darksky", "darksky", "darksky", "darksky")), 
                .Names = c("DaTe", "degc", "rh", "mslp", "rain", "snow", "type"), 
                class = c("data.table", "data.frame"))
date_func <- function(z){
  todate <- function(q){
    return(as.POSIXct(q, format = "%Y-%m-%d %H:%M:%S", tz = "UTC"))
  }
  colnum <- grep("date", tolower(colnames(z)))
  z[, (colnum) := lapply(.SD, todate), .SDcols = colnum]
  return(z)
}
ww <- date_func(copy(pp))

> str(ww)
Classes ‘data.table’ and 'data.frame':  169 obs. of  7 variables:
 $ DaTe: POSIXct, format: "2018-01-17 18:30:00" "2018-01-17 19:30:00" "2018-01-17 20:30:00" "2018-01-17 21:30:00" ...
 $ degc: num  9.31 8.37 7.5 6.76 6.14 5.58 4.87 4.07 3.86 5.14 ...
 $ rh  : num  0.5 0.53 0.56 0.57 0.58 0.59 0.6 0.61 0.6 0.53 ...
 $ mslp: num  1016 1017 1017 1017 1016 ...
 $ rain: num  0 0 0 0 0 0 0 0 0 0 ...
 $ snow: num  0 0 0 0 0 0 0 0 0 0 ...
 $ type: chr  "darksky" "darksky" "darksky" "darksky" ...
 - attr(*, ".internal.selfref")=<externalptr> 
> str(pp)
Classes ‘data.table’ and 'data.frame':  169 obs. of  7 variables:
 $ DaTe: chr  "2018-01-17 18:30:00" "2018-01-17 19:30:00" "2018-01-17 20:30:00" "2018-01-17 21:30:00" ...
 $ degc: num  9.31 8.37 7.5 6.76 6.14 5.58 4.87 4.07 3.86 5.14 ...
 $ rh  : num  0.5 0.53 0.56 0.57 0.58 0.59 0.6 0.61 0.6 0.53 ...
 $ mslp: num  1016 1017 1017 1017 1016 ...
 $ rain: num  0 0 0 0 0 0 0 0 0 0 ...
 $ snow: num  0 0 0 0 0 0 0 0 0 0 ...
 $ type: chr  "darksky" "darksky" "darksky" "darksky" ...
 - attr(*, ".internal.selfref")=<externalptr>