【发布时间】: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