使用sapply将列转换为posixct并在R中保留日期时间格式

我想使用sapply(或类似的东西)将某些列转换为R data.frame中的POSIXct,但要保持列的日期时间格式。当前执行此操作时,它将格式转换为数字。我怎样才能做到这一点?下面是一个示例。

#sample dataframe
df <- data.frame(
  var1=c(5,2),char1=c('he','she'),timestamp1=c('2019-01-01 20:30:08','2019-01-02 08:27:34'),timestamp2=c('2019-01-01 12:24:54','2019-01-02 10:57:47'),stringsAsFactors = F
)

#Convert only columns with 'timestamp' in name to POSIXct
df[grep('timestamp',names(df))] <- sapply(df[grep('timestamp',names(df))],function(x) as.POSIXct(x,format='%Y-%m-%d %H:%M:%S'))
df
  var1 char1 timestamp1 timestamp2
1    5    he 1546392608 1546363494
2    2   she 1546435654 1546444667

注意:我可以使用as.posixlt代替as.posixct,它可以工作,但是我希望数据采用POSIXct格式。我也尝试过先转换为POSIXlt,然后转换为POSIXct,但这也最终将列转换为数字。

laiyong369 回答:使用sapply将列转换为posixct并在R中保留日期时间格式

使用lapply而不是sapplysapply中的“ s”是为了简化起见,它将结果转换为矩阵,但是无法正常创建POSIXct值矩阵,因此将其转换为简单的数字矩阵。但是,如果您保留列表,就不会丢失课程。

df[grep('timestamp',names(df))] <- lapply(df[grep('timestamp',names(df))],function(x) as.POSIXct(x,format='%Y-%m-%d %H:%M:%S'))

您也可以使用dplyr

轻松完成此操作
library(dplyr)
df %>% mutate_at(vars(contains("timestamp")),as.POSIXct)
本文链接:https://www.f2er.com/3165535.html

大家都在问