2017-02-09 67 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

它很好用,謝謝。你在那裏定義的兩個函數究竟發生了什麼? – Seanosapien

回答

2

如果表是一個列表,你可以在他們使用sapply循環如下

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

我們將遍歷的tbl_list元素與sapply(tbl_list並將function(y)應用於它們。每個元素(t1t2)將依次變爲y並進行function(y)這是apply(y, 2, function(x) x/sum(x))。在apply內部,我們將function(x)應用於MARGIN2(列)。 function(x)基本上將y列的每個元素與相應列的總和相除。

+1

好的。現在對我來說更清楚了。很好解釋並再次感謝你。 – Seanosapien