将 table 元素除以多个 table 的列总和
Dividing table elements by column sums for multiple tables
我能否扫描 table 的列表以获得条件概率,还是我必须单独扫描每个 table?这是我刚刚制作的一些数据以及 table 输出,以证明我的问题
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
我需要做的是将每个 table 条目除以其列的总和以获得条件概率。我知道我可以使用应用于每个 table 的扫描函数,但我想知道它是否可以通过 lapply 或通过 for 循环应用于 table 的列表?我都试过了,但都没有成功。我也试过sweep功能,没有成功
例如:
tbl_list <- list(t1, t2)
for(tbl in tbl_list) {
tbl <- sweep(tbl, 2, colSums(tbl), `/`)
}
如果表格在列表中,您可以使用 sapply
按如下方式遍历它们
sapply(tbl_list, function(y) apply(y, 2, function(x) x/sum(x)))
我们将使用 sapply(tbl_list
遍历 tbl_list
的元素,并将 function(y)
应用于它们。每个元素(t1
和t2
)将依次变为y
并经历function(y)
即apply(y, 2, function(x) x/sum(x))
。在 apply
中,我们将 function(x)
应用于 MARGIN
2
(列)。 function(x)
基本上将 y
列的每个元素除以相应列的总和。
我能否扫描 table 的列表以获得条件概率,还是我必须单独扫描每个 table?这是我刚刚制作的一些数据以及 table 输出,以证明我的问题
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
我需要做的是将每个 table 条目除以其列的总和以获得条件概率。我知道我可以使用应用于每个 table 的扫描函数,但我想知道它是否可以通过 lapply 或通过 for 循环应用于 table 的列表?我都试过了,但都没有成功。我也试过sweep功能,没有成功
例如:
tbl_list <- list(t1, t2)
for(tbl in tbl_list) {
tbl <- sweep(tbl, 2, colSums(tbl), `/`)
}
如果表格在列表中,您可以使用 sapply
按如下方式遍历它们
sapply(tbl_list, function(y) apply(y, 2, function(x) x/sum(x)))
我们将使用 sapply(tbl_list
遍历 tbl_list
的元素,并将 function(y)
应用于它们。每个元素(t1
和t2
)将依次变为y
并经历function(y)
即apply(y, 2, function(x) x/sum(x))
。在 apply
中,我们将 function(x)
应用于 MARGIN
2
(列)。 function(x)
基本上将 y
列的每个元素除以相应列的总和。