【问题标题】:How to put values in a Function automatically如何自动将值放入函数中
【发布时间】:2021-02-04 14:29:09
【问题描述】:

我有一个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

【问题讨论】:

    标签: r function for-loop model subset


    【解决方案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
    

    更新:我对@9​​87654328@ 进行了一些更改,以便您可以在主/客队使用它:

    #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')
    

    【讨论】:

    • 好的,这个'BT(home_team$Ability,away_team$Ability) home_team
    • @Drew 我添加了一个更新,也可以试试这个(无需创建更多数据框):BT(df$Ability[df$Team=='Amur Khabarovsk'],df$Ability[df$Team=='HC Red Star Kunlun']) 你可以根据需要设置团队。希望对你有帮助!
    • 是的,但我想做的是根据谁在玩游戏来改变团队,而不是手动进行?
    • @Drew 你有另一个数据框吗?你如何定义谁在玩,也许是一个价值向量?
    • @Drew 我添加了对BT 的更改的更新。希望对你有帮助!
    猜你喜欢
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多