r - 使用 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,但这也最终将列转换为数字。
解决方案
使用lapply
而不是sapply
. 中的“s”sapply
用于简化,它将结果转换为矩阵,但 sapply 无法创建 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)
推荐阅读
- android - Can I add my layout map data to application android?
- flutter - flutter: getx RxList not run obx builder
- python - mysql.connector.errors.ProgrammingError: 1064 (42000): 你的 SQL 语法有错误;仍然
- python - 列表序列的最小差
- html - 尝试制作注册表单,但出现“SignupComponent”类型上不存在属性“地址”的错误?还有更多人喜欢它
- swiftmailer - 要在 WAMP 中使用 Swiftmailer,WAMP 中的 /usr/local/lib/php 等价物是什么?
- ios - Cocoapods 错误:无法为“RNCryptor”加载底层模块
- pygame - Pygame 窗口突然没有响应
- c - 错误:一元'*'的无效类型参数(有'int')|
- flutter - 颤动本地通知“一天中的小时,以 24 小时制 [0..23] 表示。”