2016-12-09 4 views
0

私はまだRが新しく、* ply関数を使用してデータフレームから情報を抽出したいと考えています。サンプル入力データフレームは、次のようになります。多変数関数でdaplyを使用する

# Construct the dataframe 
season <- c("12","12","12","12","12") 
hometeam <- c("Team A","MyTeam","MyTeam","Team D","Team E") 
awayteam <- c("MyTeam","Team B","Team C","MyTeam","MyTeam") 
score <- c("1 - 1","7 - 1","0 - 0","0 - 2","0 - 1") 
stats <- data.frame(season,hometeam,awayteam,score) 
print(stats) 


    season hometeam awayteam score 
1 11/12 Team A MyTeam 1 - 1 
2 11/12 MyTeam Team B 7 - 1 
3 11/12 MyTeam Team C 0 - 0 
4 11/12 Team D MyTeam 0 - 2 
5 11/12 Team E MyTeam 0 - 1 

私が何をしたいのか「MyTeam」の対戦相手だけでなく、勝者の両方を抽出しています。スコアは、ホームチームの得点対離れたチームの得点として常に与えられます。

# Get the opponent to MyTeam; can add this to dataframe later 
opponent <- ifelse(stats$hometeam == "MyTeam", stats$awayteam, stats$hometeam) 

しかし、私はすべての試合の勝者を取得しようとして立ち往生しています:私は相手がこのようなものです誰抽出する方法を持っています。私はdaply()とそのような名前付き関数でこれをやろうとしました:

# Separate out scores for home and away team to determine winner 
stats <- separate(stats, score, c('homescore','awayscore'), sep=' - ', remove=TRUE) 

# Function for use in ply to get the winner of a match 
determineWinner <- function(homescore, awayscore, hometeam) { 
    homewon <- FALSE 
    if (homescore < awayscore) { 
    homewon <- FALSE 
    } else if (homescore > awayscore) { 
    homewon <- TRUE 
    } else { 
    return("tie") 
    } 
    if (hometeam == "MyTeam") { 
    ifelse(homewon, return("won"), return("lost")) 
    } else { 
    ifelse(homewon, return("lost"), return("won")) 
    } 
}#end of function 

winner <- daply(stats, .(homescore,awayscore,hometeam), determineWinner(stats$homescore, stats$awayscore, stats$hometeam)) 

しかし、これは明らかに動作しません。私はdaply()メソッドを間違って適用していますか?私は*プライ関数が実際にどのようにふるまうかはまだ分かりません。 *プライ関数がここに行く方法だと思われますが、そこに他のソリューションがある場合、私はすべての耳です。どんな助けでも大歓迎です!

答えて

3

あなたのロジックは、ネストされたifelseを使用して実装することができます。

winner <- ifelse(stats$homescore > stats$awayscore, 
      ifelse(stats$hometeam == "MyTeam","won","lost"), 
      ifelse(stats$homescore < stats$awayscore, 
        ifelse(stats$hometeam == "MyTeam","lost","won"), 
        "tie")) 
##[1] "tie" "won" "tie" "won" "won" 
+0

のAck。私はこれを考えていたはずです!乾杯。 –

関連する問題