2017-02-09 8 views
1

条件付き確率を得るためにテーブルのリストをスイープすることができますか、または各テーブルを個別にスイープする必要がありますか?ここで私はちょうど私が行うために必要なもの複数のテーブルの列合計でテーブル要素を分割する

positions <- c("forward", "midfield", "defence", "goalkeeper", rep("forward", 5), "defender") 
nationality <- c(rep("IRE", 3), "GER", "ITA", "ENG", "FRA", "BRA", "SCO", "ESP") 
teams <- c("Milan", "Juventus", "Lazio", "Palermo", "Milan", "Juventus", "Chievo", "Siena", "Parma", "Napoli") 



dF <- data.frame(Team = factor(teams), 
       Position = factor(positions), 
       Nationality = factor(nationality), 
       stringsAsFactors = T) 

t1 <- t(table(dF$Nationality, dF$Position)) 
t2 <- t(table(dF$Nationality, dF$Team)) 



       BRA ENG ESP FRA GER IRE ITA SCO 
    defence  0 0 0 0 0 1 0 0 
    defender  0 0 1 0 0 0 0 0 
    forward  1 1 0 1 0 1 1 1 
    goalkeeper 0 0 0 0 1 0 0 0 
    midfield  0 0 0 0 0 1 0 0 



      BRA ENG ESP FRA GER IRE ITA SCO 
    Chievo  0 0 0 1 0 0 0 0 
    Juventus 0 1 0 0 0 1 0 0 
    Lazio  0 0 0 0 0 1 0 0 
    Milan  0 0 0 0 0 1 1 0 
    Napoli  0 0 1 0 0 0 0 0 
    Palermo 0 0 0 0 1 0 0 0 
    Parma  0 0 0 0 0 0 0 1 
    Siena  1 0 0 0 0 0 0 0 

私の問題を示すために、テーブルの出力と一緒に、構成された一部のデータは、条件付き確率を得るためにその列の合計によって、各テーブルエントリを分割されています。私は各テーブルに適用された掃引機能を使用することができますが、私はそれがlapplyまたはforループを介してテーブルのリストに適用できるかどうか疑問に思っていましたか?私は両方とも成功しなかった。私はまた、成功なしで掃引機能を試しました。例えば

tbl_list <- list(t1, t2) 

for(tbl in tbl_list) { 
    tbl <- sweep(tbl, 2, colSums(tbl), `/`) 
} 
+0

ありがとうございます。あなたがそこで定義した2つの関数で正確に何が起こっていますか? – Seanosapien

答えて

2

テーブルがリストにある場合、あなたは

sapply(tbl_list, function(y) apply(y, 2, function(x) x/sum(x))) 

我々はtbl_listの要素をループ意志を次のようにそれらをループにsapplyを使用することができる可能性がsapply(tbl_listfunction(y)を適用してください。各要素(t1およびt2)は、yとなり、function(y)となり、apply(y, 2, function(x) x/sum(x))となります。 applyの内部には、function(x)MARGIN2(列)に適用されます。 function(x)は、基本的に、列の各要素をそれぞれの列の合計でyに分割します。

+1

今は私には明らかです。よく説明されて、もう一度ありがとう。 – Seanosapien

関連する問題