2017-02-09 4 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). Каждый элемент (t1 и t2) последовательно становится y и проходит function(y), который составляет apply(y, 2, function(x) x/sum(x)). Внутри apply мы применим function(x) к MARGIN2 (столбцы). function(x) в основном делит каждый элемент столбцов y с суммой соответствующего столбца.

+1

Хорошо. Теперь это яснее. Хорошо объяснил и еще раз спасибо. – Seanosapien

Смежные вопросы