【问题标题】:Want only the time portion of a date-time object in R只需要 R 中日期时间对象的时间部分
【发布时间】:2013-10-27 22:38:29
【问题描述】:

我在 R 中有一个时间向量 all_symbols$Time,我正在尝试找出如何获取时间(或将时间转换为字符串而不丢失信息)。我用

strptime(all_symbol$Time[j], format="%H:%M:%S")

由于某种原因假设日期是今天并返回

[1]“2013-10-18 09:34:16”

R 中的日期和时间格式非常烦人。我试图只在不添加太多软件包的情况下获得时间(真的任何——我在无法安装库的学校计算机上)。

【问题讨论】:

  • class 是什么all_symbols$Time?我怀疑你想改用strftime
  • @James 我不确定;我该如何检查?当我输入 'A = strftime(all_symbol$Time[j], format="%H:%M:%S")' 时,我得到 'Error in as.POSIXlt.character(as.character(x), .. .) : 字符串不是标准的明确格式'
  • class(all_symbols$Time) 会给你上课。

标签: r time


【解决方案1】:

一旦您使用strptime,您必然会获得一个日期时间对象,并且格式字符串中没有日期的默认行为是假定今天的日期。如果您不喜欢这样,则需要在前面添加一个字符串,该字符串是您选择的日期。

@James 的建议等同于我的建议:

format(all_symbol$Time[j], format="%H:%M:%S")

我所知道的唯一具有时间类(即没有关联日期值的时间)的包是 package:chron。但是我发现使用格式作为从 POSIXt 对象输出字符值的一种方式非常适合需要因子输入的函数。

【讨论】:

  • +1 -- 甚至 chron,IIRC,也将时间表示为天的分数,“在这一切之下”。
  • @BondedDust,这不适用于绘图目的!
  • 您的评论没有上下文!如果使用axis,您将需要一个适当的at 参数,它是数字和一个label 参数,它是字符。如果使用其他图形函数,则需要将 x 参数与 plot 函数相匹配,并使用该轴函数的 at 参数来匹配这些参数的名称。
  • @Ehsan,出于绘图目的,也许把你所有的时间都放在同一天可能会奏效。 tt <- ymd_hm(str_c('2000-01-01', sample.time, sep = ' ')) 之类的东西(使用 lubridate 和 stringr 包)。然后处理tt 以获得您需要的情节,例如制作了一天中时间测量的直方图。您需要修复轴标签。
【解决方案2】:

最近遇到了同样的问题,发现这个和其他帖子 R: How to handle times without dates? 鼓舞人心。我想为有类似问题的人贡献一点。

如果您只想使用 R,请利用 as.Date(..., format = ("...")) 将您的日期转换为标准格式。然后,您可以使用substr 提取时间。例如substr("2013-10-01 01:23:45 UTC", 12, 16) 给你01:23

如果你可以使用lubridate 包,mdy_hms 之类的功能将使生活变得更轻松。 substr 大部分时间都在工作。

如果你想比较时间,如果它们在 Date 或 POSIXt 对象中应该可以工作。如果您只想要时间部分,则可能将其强制转换为数字(您可能需要稍后将其转换回来)。例如as.numeric(hm("00:01")) 给出 60,这意味着它是 00:00:00 之后的 60 秒。 as.numeric(hm("23:59")) 会给86340

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    相关资源
    最近更新 更多