首页 > 解决方案 > R中的字符串替换不正确

问题描述

我需要替换 R 中尴尬的字符串,特别是格式怪异的时间。数据如下所示:

      Date |    Time | AmbientTemp
2000-01-01 | 11:00 a |          25
2000-01-01 | 11:30 a |        25.5 
2000-01-01 | 11:00 p |          20
2000-01-01 | 11:30 p |        19.5

和分别表示 AM 和 PM(显然)ap

lubridate并且baseR 无法将这些日期转换为正确的格式。因此,我转向繁琐的str_replace_all函数(来自 package stringr)将我所有的时间转换为一个大型数据帧:>130000 条记录。

示例函数:

uploadDat$Time = str_replace_all(uploadDat$Time,"11:00 a","11:00")
uploadDat$Time = str_replace_all(uploadDat$Time,"11:00 p","23:00")

as.character()我在应用stringr的功能之前更改了使用的时代类别。

结果是完美的,除了 11 点时钟时间(如上)转换如下:

      Date |   Time | AmbientTemp
2000-01-01 | 101:00 |          25
2000-01-01 | 101:30 |        25.5 
2000-01-01 | 113:30 |          20
2000-01-01 | 113:30 |        19.5

为什么这些特定时间转换不正确?

标签: rstringtimereplacestringr

解决方案


我们可以paste "m"在时间的尽头,将其转换为POSIXct

format(as.POSIXct(paste0(df$Time, "m"), format = "%I:%M %p"), "%T")
#[1] "11:00:00" "11:30:00" "23:00:00" "23:30:00"

推荐阅读