【问题标题】:Trying to sort an R xts object via the 'order' function尝试通过“order”函数对 R xts 对象进行排序
【发布时间】:2021-06-14 03:42:48
【问题描述】:

有人可以帮助我理解为什么“order”函数没有按预期对 xts 数据框进行排序吗?正如您在下面看到的,由于索引显示已排序,因此 order 函数似乎完成了它的工作。但是,当在 MSFT xts 对象内应用此索引向量时,将保持原始顺序,并且不会发生行顺序的更改。我错过了什么?我意识到应用 str(MSFT) 表明这些值属于“chr”类型,但我认为这无关紧要。

library(quantmod)
getSymbols("MSFT")

sorted_indices <- order(MSFT$MSFT.Adjusted)
sorted_indices
[1] 549 547 548 544 545 546

test <- MSFT[sorted_indices,]
head(test)
MSFT.Open MSFT.High MSFT.Low MSFT.Close MSFT.Volume
2007-01-03     29.91     30.25    29.40      29.86    76935100
2007-01-04     29.70     29.97    29.44      29.81    45774500
2007-01-05     29.63     29.75    29.45      29.64    44607200
2007-01-08     29.65     30.10    29.53      29.93    50220200
2007-01-09     30.00     30.18    29.73      29.96    44636600
2007-01-10     29.80     29.89    29.43      29.66    55017400
           MSFT.Adjusted
2007-01-03      21.96213
2007-01-04      21.92535
2007-01-05      21.80031
2007-01-08      22.01361
2007-01-09      22.03568
2007-01-10      21.81502

【问题讨论】:

  • zoo 对象的要点是有一个特定顺序的时间索引。 zoo 对象按该顺序自动存储和打印。如果您想忽略 zoo 的时间顺序命令,我认为您需要转换为常规数据框。另请参阅this question

标签: r xts zoo


【解决方案1】:

您无法更改 zoo 对象的顺序,并且由于 xts 对象是 zoo 对象,因此它也适用于 xts。 Zoo 中的 oo 代表有序观察。这样的对象总是按其时间索引的顺序存储和显示。

您可以像这样从 xts 对象以各种方式创建矩阵或数据框,在这种情况下,您可以做这些对象允许的任何事情。

as.data.frame(MSFT) # data frame with times as row names
coredata(zoo(MSFT)) # matrix with times as row names
data.matrix(MSFT)   # matrix with times as row names
fortify.zoo(MSFT)   # data frame with times in column 1
coredata(MSFT)      # matrix.  No times.

或者这将创建一个动物园对象,其时间按顺序为 1、2、3、... 调整后的列。行名称将是关联的日期。

z <- zoo(MSFT, order(order(Ad(MSFT))))
View(coredata(z))

head(coredata(z))
##            MSFT.Open MSFT.High MSFT.Low MSFT.Close MSFT.Volume MSFT.Adjusted
## 2009-03-09     15.20     15.74    15.10      15.15    66479100      11.58155
## 2009-03-05     15.86     15.88    15.27      15.27    89708500      11.67328
## 2009-03-06     15.35     15.62    14.87      15.28    92821400      11.68093
## 2009-03-02     15.96     16.25    15.72      15.79    80602100      12.07080
## 2009-03-03     16.03     16.24    15.64      15.88    80476600      12.13960
## 2009-03-04     16.12     16.40    15.89      16.12    69285100      12.32307

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 2022-12-11
    相关资源
    最近更新 更多