使用R语言POSIXct拆分日期时间列时时间字段返回NA的求助
解决方法
问题出在你使用as.POSIXct(heartrate$Time, format = '%H:%M:%S')时,format参数需要匹配Time列完整的字符串格式,但你的Time列是包含日期+时间的完整字符串,只指定时间格式的话,R无法解析整个字符串,所以返回NA。
正确的处理步骤如下:
1. 确保Time列被解析为日期时间类型
如果read_csv没有自动将Time列识别为POSIXct类型,先手动转换(根据你数据中Time的实际格式调整format参数,从示例的New_date格式推测,原Time格式类似"4/12/20 00:00:00"):
# 示例格式:MM/DD/YY HH:MM:SS,根据你的实际数据调整 heartrate$Time <- as.POSIXct(heartrate$Time, format = "%m/%d/%y %H:%M:%S")
2. 提取日期和时间
- 提取日期:你原来的
as.Date()写法是正确的 - 提取HH:MM:SS格式的时间:
- 若需要字符串类型:用
format()函数从POSIXct对象中提取时间部分 - 若需要专门的时间类型(便于后续时间运算):用
hms包转换
- 若需要字符串类型:用
代码实现
# 提取日期 heartrate$New_date <- as.Date(heartrate$Time) # 提取字符串格式的时间(HH:MM:SS) heartrate$New_time_str <- format(heartrate$Time, "%H:%M:%S") # 提取时间类型的时间(推荐) # 先安装hms包(未安装时执行) # install.packages("hms") library(hms) heartrate$New_time <- as_hms(heartrate$Time)
验证结果
处理后的数据示例:
| Id | Time | Value | New_date | New_time_str | New_time |
|---|---|---|---|---|---|
| 2022484408 | 2020-04-12 00:00:00 | 97 | 2020-04-12 | 00:00:00 | 00:00:00 |
| 2022484408 | 2020-04-12 00:00:05 | 102 | 2020-04-12 | 00:00:05 | 00:00:05 |
内容的提问来源于stack exchange,提问作者RK Kakkar
相关产品推荐
相关产品推荐

