#r #function #for-loop #model #subset
#r #функция #for-цикл #Модель #подмножество
Вопрос:
У меня есть data.frame
Team Ability SE
Amur Khabarovsk Amur Khabarovsk 0.0000000 0.0000000
Sibir Novosibirsk Sibir Novosibirsk -0.2523662 0.7325424
Lokomotiv Yaroslavl Lokomotiv Yaroslavl 1.8614021 0.7883580
HC Red Star Kunlun HC Red Star Kunlun -1.2255611 0.9341483
HC Sochi HC Sochi -0.2862795 0.7735475
SKA St. Petersburg SKA St. Petersburg 0.9110674 0.6958989
и у меня есть эта функция
BT <- function(deltaa,deltab){
exp(deltaa-deltab) / (1 exp(deltaa-deltab))
deltaa, deltab будут значениями из столбца возможностей в data.frame, т.е.
> BT( 1.8614021,1.6718526 )
[1] 0.547246
How do I put these values in BT(function), based on team column of data.frame?
Я понял это, но как мне изменить имена команд в фильтрах, не делая этого вручную?
BT( home_team$Ability,away_team$Ability )
home_team <- filter(KHL_Abilities,Team==" Jokerit ")
away_team <- filter(KHL_Abilities, Team==" HC Sochi ")
> BT( home_team$Ability,away_team$Ability )
[1] 0.8763307
Ответ №1:
Возможно, вы ищете это. Вы можете сохранить результаты для своей функции BT
в новой переменной и вызвать ее в качестве первого аргумента переменной Ability
. Здесь код:
#Function
BT <- function(deltaa,deltab){
exp(deltaa-deltab) / (1 exp(deltaa-deltab))}
#Create var
df$Result <- BT(deltaa = df$Ability,deltab = 1.6718526)
Вывод:
Team Ability SE Result
1 Amur Khabarovsk 0.0000000 0.0000000 0.15817734
2 Sibir Novosibirsk -0.2523662 0.7325424 0.12739185
3 Lokomotiv Yaroslavl 1.8614021 0.7883580 0.54724600
4 HC Red Star Kunlun -1.2255611 0.9341483 0.05228156
5 HC Sochi -0.2862795 0.7735475 0.12366934
6 SKA St. Petersburg 0.9110674 0.6958989 0.31847582
Некоторые используемые данные:
#Data
df <- structure(list(Team = c("Amur Khabarovsk", "Sibir Novosibirsk",
"Lokomotiv Yaroslavl", "HC Red Star Kunlun", "HC Sochi", "SKA St. Petersburg"
), Ability = c(0, -0.2523662, 1.8614021, -1.2255611, -0.2862795,
0.9110674), SE = c(0, 0.7325424, 0.788358, 0.9341483, 0.7735475,
0.6958989)), row.names = c(NA, -6L), class = "data.frame")
Чтобы избежать фильтрации и других фреймов данных, попробуйте следующее:
#Code
BT(df$Ability[df$Team=='Amur Khabarovsk'],df$Ability[df$Team=='HC Red Star Kunlun'])
Вывод (с использованием общих данных):
[1] 0.7730407
Обновление: я внес некоторые изменения BT
, чтобы вы могли использовать его с домашней / выездной командой:
#Function 2
BT <- function(data,home,away){
home <- subset(data,Team==home)
away <- subset(data,Team==away)
#Obtain values
deltaa <- home$Ability
deltab <- away$Ability
exp(deltaa-deltab) / (1 exp(deltaa-deltab))}
#Apply
BT(df,home = 'Amur Khabarovsk',away = 'HC Red Star Kunlun')
Комментарии:
1. Ок, получил это ‘BT (home_team $ Ability, away_team $ Ability ) home_team <- filter (KHL_Abilities, Team ==» Йокерит «) away_team <- filter (KHL_Abilities, Team == » ХК Сочи «)’ Но я хочу, чтобы названия команд в фильтрах могли менятьсябез того, чтобы я делал это вручную
2. @Drew Я добавил обновление, также попробуйте с этим (нет необходимости создавать дополнительные фреймы данных):
BT(df$Ability[df$Team=='Amur Khabarovsk'],df$Ability[df$Team=='HC Red Star Kunlun'])
вы можете настроить команды по своему усмотрению. Надеюсь, это вам поможет!3. Да, но то, что я пытаюсь сделать, это изменить команды в зависимости от того, кто играет в игру, не делая этого вручную?
4. @Drew У вас есть другой фрейм данных? Как вы определяете, кто играет, может быть, вектор значений?
5. @Drew Я добавил обновление с изменениями
BT
. Я надеюсь, что это может вам помочь!