R 将字符datetime转换为datetime
我想创建一个函数,以datetime格式转换字符datetime 此函数只包含一个参数:dataframe 日期示例:2017年6月1日11:10:51 我测试了这样的东西: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") } } 我如何才能实现这一转变
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>