仅求和xts对象中一行的负值

时间:2018-07-03 13:26:38

标签: r matrix sum xts zoo

我有一个xts对象,我只想对第一行中的负值求和

代码

sum(test[test<0])

给我错误

Error in `[.xts`(test, test < 0) : 'i' or 'j' out of range

但是

sum(test[1],na.rm=TRUE)

有效,但是我得到了所有值的总和,而不仅仅是负数:

[1] -0.9786889

还没有给出数据示例,有人知道为什么这个简单的代码行不通吗?

xts对象的尺寸为> dim(test)216 39

2 个答案:

答案 0 :(得分:1)

这可能与此处的open xts问题有关---> here

看来xts对象不能以此方式成为子集。相反,您应该使用coredata(),这是xts函数,会将“核心数据”视为矩阵。

有点混乱,但是:

sum(coredata(test)[1,][coredata(test)[1,] < 0]

应该工作。如果要对所有行都执行此操作,则需要使用诸如apply()或for循环之类的方法。

答案 1 :(得分:0)

有一些可能性:

sum(pmin(test[1], 0), na.rm = TRUE)

sum(test[1] * (test[1] < 0), na.rm = TRUE)

sum(Filter(function(x) x < 0, coredata(test[1])))