R中矩阵中因子列的比例
Proportions for factor columns in matrix in R
我想计算 R 矩阵中因子水平的比例。
示例数据:
mtx <- matrix(NA, nrow=8, ncol=4)
set.seed(12)
wordclass <- c("Function", "Content", "Insert")
for(i in 1:nrow(mtx)){
mtx[i,] <- sample(wordclass, 4, replace = T)
}
mtx
[,1] [,2] [,3] [,4]
[1,] "Content" "Content" "Insert" "Insert"
[2,] "Content" "Function" "Function" "Content"
[3,] "Insert" "Content" "Function" "Content"
[4,] "Function" "Content" "Content" "Content"
[5,] "Insert" "Function" "Function" "Insert"
[6,] "Content" "Insert" "Content" "Function"
[7,] "Insert" "Content" "Function" "Function"
[8,] "Function" "Content" "Insert" "Content"
如果我将 mtx
转换为数据框,我可以使用 sapply
来获取比例:
mtx_df <- as.data.frame(mtx)
props <- as.data.frame(sapply(mtx_df, function(x) prop.table(table(x))))
props
V1 V2 V3 V4
Content 0.375 0.625 0.25 0.50
Function 0.250 0.250 0.50 0.25
Insert 0.375 0.125 0.25 0.25
但是有没有办法通过数据帧转换获得而不绕道的比例?
您可以使用 apply
,它更适用于对列使用 MARGIN = 2
的矩阵。
apply(mtx, 2, function(x) prop.table(table(factor(x, levels = wordclass))))
# [,1] [,2] [,3] [,4]
#Content 0.375 0.625 0.25 0.50
#Function 0.250 0.250 0.50 0.25
#Insert 0.375 0.125 0.25 0.25
如果我们对数据集 col
执行 table
,我们可以以矢量化的方式执行此操作
prop.table(table(c(mtx), c(col(mtx))), 2)
# 1 2 3 4
# Content 0.375 0.625 0.250 0.500
# Function 0.250 0.250 0.500 0.250
# Insert 0.375 0.125 0.250 0.250
我想计算 R 矩阵中因子水平的比例。
示例数据:
mtx <- matrix(NA, nrow=8, ncol=4)
set.seed(12)
wordclass <- c("Function", "Content", "Insert")
for(i in 1:nrow(mtx)){
mtx[i,] <- sample(wordclass, 4, replace = T)
}
mtx
[,1] [,2] [,3] [,4]
[1,] "Content" "Content" "Insert" "Insert"
[2,] "Content" "Function" "Function" "Content"
[3,] "Insert" "Content" "Function" "Content"
[4,] "Function" "Content" "Content" "Content"
[5,] "Insert" "Function" "Function" "Insert"
[6,] "Content" "Insert" "Content" "Function"
[7,] "Insert" "Content" "Function" "Function"
[8,] "Function" "Content" "Insert" "Content"
如果我将 mtx
转换为数据框,我可以使用 sapply
来获取比例:
mtx_df <- as.data.frame(mtx)
props <- as.data.frame(sapply(mtx_df, function(x) prop.table(table(x))))
props
V1 V2 V3 V4
Content 0.375 0.625 0.25 0.50
Function 0.250 0.250 0.50 0.25
Insert 0.375 0.125 0.25 0.25
但是有没有办法通过数据帧转换获得而不绕道的比例?
您可以使用 apply
,它更适用于对列使用 MARGIN = 2
的矩阵。
apply(mtx, 2, function(x) prop.table(table(factor(x, levels = wordclass))))
# [,1] [,2] [,3] [,4]
#Content 0.375 0.625 0.25 0.50
#Function 0.250 0.250 0.50 0.25
#Insert 0.375 0.125 0.25 0.25
如果我们对数据集 col
执行 table
,我们可以以矢量化的方式执行此操作
prop.table(table(c(mtx), c(col(mtx))), 2)
# 1 2 3 4
# Content 0.375 0.625 0.250 0.500
# Function 0.250 0.250 0.500 0.250
# Insert 0.375 0.125 0.250 0.250