Условное суммирование (R)

Я пытаюсь создать условную сумму, чтобы рассчитать среднее. Идея состоит в том, что функция (или оператор применения) проверяет, истинно ли определенное значение (например, x> 0), затем суммирует все значения x, которые больше нуля. Последним шагом будет разделение этой суммы на количество экземпляров, которые больше нуля. Поиск условной суммы (ming) не дал мне полезной информации.

Это часть данных:

> tmpData
   Instrument TradeResult.Currency.
1         JPM                    -3
2         JPM                   264
3         JPM                   284
4         JPM                    69
5         JPM                   283
11        KFT                    -8
12        KFT                   -48
13        KFT                   125
14        KFT                  -150
15        KFT                  -206
16        KFT                   107

Из функций, которые я пробовал, следующие наиболее перспективны:

avgProfit <- function(x) {
    ifelse(x > 0,
    sum(x) / length(which(x > 0)),
    return(0))
    }

Однако, вывод этой функции равен 0:

> with(tmpData, tapply(TradeResult.Currency., Instrument, avgProfit))
JPM KFT 
  0   0     
> avgProfit(tmpData$TradeResult.Currency.)
[1] 0
> x
 [1] 1 1 2 1 2 3 3 3 4 4

(значения должны быть 225 для JPM (всего 900, разделенные на 4 экземпляра, которые больше нуля) и 116 для KFT)

Даже если я вычисляю сумму x ( который, если я правильно понимаю, должен быть суммой отдельных значений в data.frame) в функции, вывод переменной 'x' меня озадачивает. Я не могу найти, откуда берутся эти 1,2,3 и четверки.

Как я могу вычислить условную сумму? Кроме, мне нужно использовать функцию, или я делаю ее слишком сложной (возможно, для этого есть встроенная функция R, которую я не заметил?)

Любые мысли более чем приветствуются,

С уважением,

5
задан Jura 6 December 2010 в 07:57
поделиться