【问题标题】:Subsetting an "xts" (matrix) where elements exceed a given threshold对元素超过给定阈值的“xts”(矩阵)进行子集化
【发布时间】:2014-02-01 23:29:33
【问题描述】:

考虑一个类似于以下的 xts 矩阵:

> x=xts(matrix(1:12, ncol=3), Sys.Date()+1:4  )
> x[1,]=NA
> x
           [,1] [,2] [,3]
2014-01-15   NA   NA   NA
2014-01-16    2    6   10
2014-01-17    3    7   11
2014-01-18    4    8   12

要获得超过 4 个的元素:

>   coredata(x)[x>4]
[1] NA NA  6  7  8 NA 10 11 12

并且没有 NA:

>    coredata(x)[!is.na(x) & x >4]
[1]  6  7  8 10 11 12

NA 不会选择 x 中的元素,因此以下操作也不会使第一行无效:

>   coredata(x)[x>4]=0
> x
           [,1] [,2] [,3]
2014-01-15   NA   NA   NA
2014-01-16    2    0    0
2014-01-17    3    0    0
2014-01-18    4    0    0

问题是:当x 很大时,这种子集设置方法是否有效,还是有更多特定于 xts 的方法?

【问题讨论】:

  • 如果你不关心xts对象的索引,这个方法应该是高效的,因为你是直接处理矩阵数据。
  • @ChinmayPatil:实际上,只做x[x>4] 就好了。由于 xts 类声称类似于矩阵,我认为有更好的替代方法来通过coredata 转换/提取矩阵。
  • 您不需要 coredata 来完成该任务。你可以做x[x>4] <- 0

标签: r matrix xts subset


【解决方案1】:

您可以在子集时尝试which=TRUE 参数

x = xts(matrix(1:12, ncol = 3), Sys.Date() + 1:4)
x[1, ] = NA
x[x > 4, which = T]
## [1]  6  7  8 10 11 12

【讨论】:

    猜你喜欢
    • 2014-02-02
    • 2014-04-24
    • 2020-11-22
    • 2014-05-05
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多