Я пытаюсь создать условную сумму, чтобы рассчитать среднее. Идея состоит в том, что функция (или оператор применения) проверяет, истинно ли определенное значение (например, 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, которую я не заметил?)
Любые мысли более чем приветствуются,
С уважением,