【问题标题】:How to extract ONLY time from strptime()?如何仅从 strptime() 中提取时间?
【发布时间】:2017-01-10 06:57:04
【问题描述】:

部分数据如下:

head(my_data[,c(1,2)], 3)
       Date Time 
1 16/12/2006 17:24:00 
2 16/12/2006 17:25:00 
3 16/12/2006 17:26:00

顺便说一句,str() $Date, $Time 现在都是 chr。

我想以正确的格式将它们保存在两个列中,所以我使用

x <- as.Date(my_data$Date, "%d/%m/%Y")

获取日期格式的第一列:

x[1:5]
[1] "2006-12-16" "2006-12-16" "2006-12-16" "2006-12-16" "2006-12-16"  

但是在第二列,当我尝试使用时

y <- strptime(my_data$Time, "%H:%M:%S")

输出会自动添加我电脑的默认日期和时区。

y[1:4]
[1] "2017-01-10 17:24:00 CST" "2017-01-10 17:25:00 CST" 
[2] "2017-01-10 17:26:00 CST" "2017-01-10 17:27:00 CST"

如果我只想保持时间,没有日期和时区,我该怎么办?
sub() 使用一些正则表达式是实现此目的的唯一方法吗?

【问题讨论】:

  • 如果你想拥有一个纯时间对象,你需要一个定义了这样一个类的包。你可以使用包chron。但是,我建议将日期和时间组合到 POSIXct 对象中。需要考虑闰年和闰秒等问题。

标签: r time strptime


【解决方案1】:

我们可以使用sub来提取'时间'组件

sub(".*\\s+", "",  y)
#[1] "17:24:00" "17:25:00" "17:26:00"

如果我们想要一个time 类,请使用chron 中的times

library(chron)
times(my_data$Time)
#[1] 17:24:00 17:25:00 17:26:00

【讨论】:

  • 非常感谢!我想这就是我想要得到的。 chron 包。
【解决方案2】:

我们可以使用format来提取时间分量

format(strptime(y, "%H:%M:%S"),"%H:%M:%S")

lubridate 包的另一种选择

library(lubridate)
hms(my_data$Time)

【讨论】:

  • 使用format,我只能获得列出的时间,使用str() 获得chr。但是format() 对我代码的其他部分非常有帮助。谢谢!
  • @hepeng 试试lubridate中的hms函数。
  • hms(date()) 不起作用!我认为这个建议是完全错误的!
  • @ThejKiran 在我有x &lt;- c("17:24:00","17:25:00","17:26:00") 时为我工作,然后我为lubridate::hms(x) 工作。
猜你喜欢
  • 1970-01-01
  • 2016-12-07
  • 2014-03-02
  • 2021-10-14
  • 2021-07-20
  • 1970-01-01
  • 2020-08-12
  • 2017-08-15
  • 1970-01-01
相关资源
最近更新 更多