Я пытаюсь создать условную сумму, чтобы вычислить среднее значение. Идея состоит в том, что функция (или оператор apply) проверяет, является ли определенное значение истинным (например, x> 0), а затем суммирует все значения x, которые выше нуля. Последний шаг - разделить эту сумму на количество экземпляров, которые больше нуля. Поиск условной суммы (мин) не дал мне полезной информации.
Это часть данных:
> 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, которую я упустил из виду?)
Любые мысли приветствуются,
С уважением,