gpt4 book ai didi

r - 将字符向量转换为 POSIXct/POSIXlt 时 as.POSIXct/as.POSIXlt 和 strptime 之间的差异

转载 作者:行者123 更新时间:2023-12-03 05:01:44 28 4
gpt4 key购买 nike

我在这里关注了一些有关如何将字符向量转换为日期时间类的问题。我经常看到两种方法,strptime 和 as.POSIXct/as.POSIXlt 方法。我查看了这两个函数,但不清楚它们有什么区别。

strptime

function (x, format, tz = "") 
{
y <- .Internal(strptime(as.character(x), format, tz))
names(y$year) <- names(x)
y
}
<bytecode: 0x045fcea8>
<environment: namespace:base>

as.POSIXct

function (x, tz = "", ...) 
UseMethod("as.POSIXct")
<bytecode: 0x069efeb8>
<environment: namespace:base>

as.POSIXlt

function (x, tz = "", ...) 
UseMethod("as.POSIXlt")
<bytecode: 0x03ac029c>
<environment: namespace:base>

进行微基准测试以查看是否存在性能差异:

library(microbenchmark)
Dates <- sample(c(dates = format(seq(ISOdate(2010,1,1), by='day', length=365), format='%d-%m-%Y')), 5000, replace = TRUE)
df <- microbenchmark(strptime(Dates, "%d-%m-%Y"), as.POSIXlt(Dates, format = "%d-%m-%Y"), times = 1000)

Unit: milliseconds
expr min lq median uq max
1 as.POSIXlt(Dates, format = "%d-%m-%Y") 32.38596 33.81324 34.78487 35.52183 61.80171
2 strptime(Dates, "%d-%m-%Y") 31.73224 33.22964 34.20407 34.88167 52.12422

strptime 似乎稍微快一些。那么什么给出呢?为什么会有 2 个类似的功能,或者我错过了它们之间的差异?

最佳答案

嗯,这些函数做不同的事情。

首先,日期/时间有两个内部实现:POSIXct ,它存储自 UNIX 纪元以来的秒数(+一些其他数据),以及 POSIXlt ,存储日、月、年、时、分、秒等列表。

strptime是一个将字符向量(多种格式)直接转换为 POSIXlt 的函数格式。

as.POSIXlt将各种数据类型转换为POSIXlt 。它试图变得聪明并做明智的事情 - 就角色而言,它充当 strptime 的包装器。 .

as.POSIXct将各种数据类型转换为POSIXct 。它还试图变得聪明并做明智的事情 - 就角色而言,它运行 strptime首先,然后从 POSIXlt 进行转换至POSIXct .

这是有道理的 strptime更快,因为 strptime仅处理字符输入,而其他方法则尝试根据输入类型确定使用哪种方法。它还应该更安全一些,因为收到意外数据只会给出错误,而不是尝试做可能不是您想要的智能事情。

关于r - 将字符向量转换为 POSIXct/POSIXlt 时 as.POSIXct/as.POSIXlt 和 strptime 之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10699511/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com