gpt4 book ai didi

r - 从 `zoo` 到 `xts` 的转换会在索引中创建大量 NA

转载 作者:行者123 更新时间:2023-12-01 07:43:53 24 4
gpt4 key购买 nike

我有一个相当奇怪的问题,可能最好用一个 R session 的例子来描述。正如以下评论中所要求的,我已尝试使其可重现。

meto <- structure(c(30, 25, 25, 25, 20, 20, 20, 20, 20, 20), index = structure(c(12796, 
12796.0416666667, 12796.0833333333, 12796.125, 12796.1666666667,
12796.2083333333, 12796.25, 12796.2916666667, 12796.3333333333,
12796.375), format = structure(c("d/m/y", "h:m:s"), .Names = c("dates",
"times")), origin = structure(c(1, 1, 1970), .Names = c("month",
"day", "year")), class = c("chron", "dates", "times")), class = "zoo")

示例数据集如下所示:

> meto
(13/01/05 00:00:00) (13/01/05 01:00:00) (13/01/05 02:00:00) (13/01/05 03:00:00) (13/01/05 04:00:00)
30 25 25 25 20
(13/01/05 05:00:00) (13/01/05 06:00:00) (13/01/05 07:00:00) (13/01/05 08:00:00) (13/01/05 09:00:00)
20 20 20 20 20
> str(meto)
‘zoo’ series from (13/01/05 00:00:00) to (13/01/05 09:00:00)
Data: num [1:10] 30 25 25 25 20 20 20 20 20 20
Index: Classes 'chron', 'dates', 'times' atomic [1:10] 12796 12796 12796 12796 12796 ...
..- attr(*, "format")= Named chr [1:2] "d/m/y" "h:m:s"
.. ..- attr(*, "names")= chr [1:2] "dates" "times"
..- attr(*, "origin")= Named num [1:3] 1 1 1970
.. ..- attr(*, "names")= chr [1:3] "month" "day" "year"

当我们转换为 XTS 时:

m <- as.xts(meto)

这导致以下输出:

> str(m)
An ‘xts’ object from NA to NA containing:
Data: num [1:10, 1] 30 25 25 25 20 20 20 20 20 20
Indexed by objects of class: [chron,dates,times] TZ:
xts Attributes:
NULL
> summary(m)
Index m
Min. :NA Min. :20.0
1st Qu.:NA 1st Qu.:20.0
Median :NA Median :20.0
Mean :NA Mean :22.5
3rd Qu.:NA 3rd Qu.:25.0
Max. :NA Max. :30.0
NA's :10
Warning message:
In data.row.names(row.names, rowsi, i) :
some row.names duplicated: 2,3,4,5,6,7,8,9,10 --> row.names NOT used

如您所见,动物园时间序列中有很多数据,由 chron 对象索引。但是,当我使用 as.xts 将其转换为 xts 时间序列时,开始时看起来没问题...但是 str 命令显示 NA 并将 meto 的摘要与 m 进行比较表明索引中已创建了超过 36,000 个 NA!

有谁知道为什么会这样,或者我能做些什么来解决它?

最佳答案

问题是您的索引属于 chron 类。我对 chron 知之甚少,但据我所知,通常首选在 R 中使用 POSIX 日期时间对象,即 POSIXctPOSIXlt

在从 zooxts 的转换过程中,chron 类信息被破坏了。

将您的索引转换为 POSIXct 类可解决问题。

index(meto) <- as.POSIXct(index(meto)) 
as.xts(meto)

[,1]
2005-01-13 00:00:00 30
2005-01-13 01:00:00 25
2005-01-13 01:59:59 25
2005-01-13 03:00:00 25
2005-01-13 04:00:00 20
2005-01-13 04:59:59 20
2005-01-13 06:00:00 20
2005-01-13 07:00:00 20
2005-01-13 07:59:59 20
2005-01-13 09:00:00 20

有关使用 R 日期和时间类的更多信息,请参阅 ?DateTimeClasses?POSIXct?strptime - 它们都会导致相同的帮助页面。


编辑

如果从 zoo 导入时 xts 应该处理 chron 对象,您可能在函数 xts 中发现了一个错误::xts.

问题出现在这一行:

if (inherits(order.by, "dates")) 
index <- as.numeric(as.POSIXct(strptime(as.character(order.by),
"(%m/%d/%y %H:%M:%S)")))

但是请注意,您的 chron 对象的格式是 ("d/m/y", "h:m:s") - 我从您那里知道这一点str(meto)。仔细看 - 日和月之间有错位。

这很可能是语言环境问题。我相信包作者住在美国,标准格式是 m/d/y,但在许多其他地方,标准格式是 d/m/y。

因此,在 zoo 和 xts 之间的转换中,转换代码应该以某种方式根据用户的语言环境进行调整。

我建议您联系包作者并提供此信息。

关于r - 从 `zoo` 到 `xts` 的转换会在索引中创建大量 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8444597/

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