仅对 xts 对象的一行中的负值求和
sum only the negative values in a row from an xts-object
我有一个 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
。
这可能与这里的 open xts 问题有关 ---> here
xts 对象似乎无法以这种方式进行子集化。相反,您应该使用 coredata()
,一个将 "core data" 视为矩阵的 xts 函数。
有点乱但是:
sum(coredata(test)[1,][coredata(test)[1,] < 0]
应该可以。如果您想对所有行执行此操作,则需要使用类似 apply() 或 for 循环的方法。
这里有一些可能性:
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])))
我有一个 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
。
这可能与这里的 open xts 问题有关 ---> here
xts 对象似乎无法以这种方式进行子集化。相反,您应该使用 coredata()
,一个将 "core data" 视为矩阵的 xts 函数。
有点乱但是:
sum(coredata(test)[1,][coredata(test)[1,] < 0]
应该可以。如果您想对所有行执行此操作,则需要使用类似 apply() 或 for 循环的方法。
这里有一些可能性:
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])))