суммировать только отрицательные значения в строке от объекта xts - PullRequest
0 голосов
/ 03 июля 2018

У меня есть объект 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 голосов
/ 03 июля 2018

Вот несколько возможностей:

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])))
0 голосов
/ 03 июля 2018

Есть вероятность, что это связано с проблемой Open XTS здесь ---> здесь

Похоже, что объекты xts не могут быть подмножеством таким образом. Вместо этого вы должны использовать coredata(), функцию xts, которая обрабатывает «базовые данные» как матрицу.

Это немного грязно, но:

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

должно работать. Если вы хотите сделать это для всех строк, вам необходимо использовать что-то вроде apply () или цикл for.

...