【问题标题】:Create a POSIXlt from a list of time components从时间组件列表创建 POSIXlt
【发布时间】:2016-05-13 00:07:02
【问题描述】:

我正在将一些 JSON 数据读入 R,并将日期时间信息存储为单独的时间组件(年、月、小时等)。鉴于我已经有了单独的部分,看起来应该很容易创建一个 POSIXlt 对象,因为后者只是时间组件的列表。

as.POSIXlt 不接受组件的命名列表或向量。可以通过将适当的类和 attr 添加到列表来创建 POSIXlt,但是如果没有我没有的 wday 和 yday 元素,它会失败。

我知道我可以将列表转换为字符串并解析它,但这是一个非常不雅的解决方案,我想我会确保没有更好的方法。

编辑:ISOdatetime 正是我想要的。谢谢!

【问题讨论】:

  • 你能发布一些示例数据吗?所以我们实际上可以提供工作代码来提供帮助吗?
  • 我认为这不会产生影响。我已经组合了一个可行的解决方案(在我的问题中提到)。我只是想知道 R 专家是否可以提出更好的方法。
  • 如果您想使用堆栈溢出来获得帮助,最好遵循可重现示例的指南。我建议你这样做。就是这样。

标签: r datetime


【解决方案1】:

ISOdate 是要使用的命令:

ISOdate(year, month, day, hour = 12, min = 0, sec = 0, tz = "GMT")

函数返回一个 POSIXct 类型。有关详细信息,请参阅 ?ISOdate。

【讨论】:

  • 太棒了!这在任何搜索过程中都没有出现。 ISOdatetime 做同样的事情,没有默认的小时/分钟/秒。完美的。谢谢!
【解决方案2】:

ISOdate 或 ISOdatetime 函数显然是要使用的函数,但既然你问如何以 POSIXlt 作为起点,这里有一点黑客攻击:

 test <- as.POSIXlt("1970-01-01")
 dput(test)
structure(list(sec = 0, min = 0L, hour = 0L, mday = 1L, mon = 0L, 
    year = 70L, wday = 4L, yday = 0L, isdst = 0L, zone = "PST", 
    gmtoff = NA_integer_), .Names = c("sec", "min", "hour", "mday", 
"mon", "year", "wday", "yday", "isdst", "zone", "gmtoff"), class = c("POSIXlt", 
"POSIXt"))
 test$year <- 1941
 test$mon <- 12
 test$mday <-7
 test
#[1] "3842-01-07 PST"   Wrong offset
 test$year <- 41
 test
#[1] "1942-01-07 PST"    "An infamous date"

我怀疑这是“错误的”。因为我怀疑星期几或其他列表项是否正确重新调整。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-24
    • 2014-10-25
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多