Я борюсь с чем-то очень простым, но я собираюсь по кругу и просто не вижу, где я делаю ошибку. Я очень надеюсь, что кто-то может предложить мне удобное предложение, чтобы я больше не застрял!Вычисление процентов в заявлении о применении (R)
Моя цель: Я хочу рассчитать процент экземпляров в data.frame, который имеет результат выше 0. Я пробовал это с циклом for, но безрезультатно. Итак, после некоторого поиска я использовал функцию apply для вычисления различных показателей как средних, sd и min/max. Это отлично работает, но для вычисления процента функция приложения не работает, даже когда я создаю пользовательскую функцию и вставляю ее в функцию apply.
Это сокращенная версия моего data.frame:
tradesList[c(1:5,10:15),c(1,7)]
Instrument TradeResult.Currency.
1 JPM -3
2 JPM 264
3 JPM 284
4 JPM 69
5 JPM 283
10 JPM -294
11 KFT -8
12 KFT -48
13 KFT 125
14 KFT -150
15 KFT -206
Я хочу обобщить эту data.frame, например, показывая средний TradeResult для каждого инструмента:
> tapply(tradesList$TradeResult.Currency., tradesList$Instrument, mean)
JPM KFT
42.3 14.6
Однако , Я также хотел бы рассчитать процент строк, которые имеют TradeResult> 0 за инструмент. Однако, если функция «какая», проверяющая экземпляры, которые работают> 0, работает, не будет принимать эту функцию в качестве аргумента.
> length(which(tradesList$TradeResult.Currency. > 0))/length(tradesList$TradeResult.Currency.) * 100
[1] 50
> tapply(tradesList$TradeResult.Currency., tradesList$Instrument, (length(which(tradesList$TradeResult.Currency. > 0))/length(tradesList$TradeResult.Currency.) * 100))
Error in match.fun(FUN) :
c("'(length(which(tradesList$TradeResult.Currency. > 0))/length(tradesList$TradeResult.Currency.) * ' is not a function, character or symbol", "' 100)' is not a function, character or symbol")
>
Я искал в функции справки для получения дополнительной информации об этой ошибке, и пытались различными способами формулирования функции (например, при помощи кронштейнов или кавычки), но каждый способ приводит к тому же результату.
Кто-нибудь знает, кто хочет вычислить процент экземпляров, которые больше нуля? Может, я что-то упустил?
Большое спасибо заранее,
С уважением,
Edit: Большое спасибо за ваши быстрые комментарии G. гротендиковых, Гэвин Симпсон и Двине. Очень ценится и очень полезно!
Решено: Вот что я сейчас:
> tmpData <- tradesList[c(1:5,10:15),c(1,7)]
> tmpData
Instrument TradeResult.Currency.
1 JPM -3
2 JPM 264
3 JPM 284
4 JPM 69
5 JPM 283
10 JPM -294
11 KFT -8
12 KFT -48
13 KFT 125
14 KFT -150
15 KFT -206
> 100* # to get percentages
+ with(tmpData,
+ tapply((TradeResult.Currency. > 0) , Instrument, sum)/ # number GT 0
+ tapply(TradeResult.Currency., Instrument, length)) # total number
JPM KFT
66.66667 20.00000
> 100 * tapply(tmpData$TradeResult.Currency. > 0, tmpData$Instrument, mean)
JPM KFT
66.66667 20.00000
> pcentFun <- function(x) {
+ res <- x > 0
+ 100 * (sum(res)/length(res))
+ }
>
> with(tmpData, tapply(TradeResult.Currency., Instrument, pcentFun))
JPM KFT
66.66667 20.00000
Еще раз спасибо!
С уважением,
Спасибо, Гэвин, это действительно полезно. Совокупное предложение - это также кое-что, что я могу использовать для остальной части моего анализа R. Большой! – Jura25 2010-12-05 16:52:03