R 中行的频率 table
Frequency table by row in R
这可能是一个新手问题,但我在网上找不到答案...可能是因为我不善于描述问题。
我想创建按行分隔的标称数据的频率 table。例如,在这个矩阵中:
x <- matrix(nrow = 3, ncol = 3,
c("A","B","B",
"C","C","B",
"D","A","B"
))
使用 table(x) 函数得到:
A B C D
2 4 2 1
但我想获得每一行的单独计数,结果 table 是:
A B C D
1 2 0 0
0 1 1 0
1 1 0 1
我确定这是某种形式的偶然事件 table 但对于我来说,我无法弄清楚。
我们可以使用 apply
和 MARGIN=1
循环遍历列,转换为 factor
,levels
指定为 unique
个元素 'x',得到 table
un1 <- sort(unique(c(x)))
t(apply(x, 2, function(x) table(factor(x, levels = un1))))
# A B C D
#[1,] 1 2 0 0
#[2,] 0 1 2 0
#[3,] 1 1 0 1
或使用矢量化方法
table(c(col(x)), c(x))
# A B C D
# 1 1 2 0 0
# 2 0 1 2 0
# 3 1 1 0 1
这可能是一个新手问题,但我在网上找不到答案...可能是因为我不善于描述问题。
我想创建按行分隔的标称数据的频率 table。例如,在这个矩阵中:
x <- matrix(nrow = 3, ncol = 3,
c("A","B","B",
"C","C","B",
"D","A","B"
))
使用 table(x) 函数得到:
A B C D
2 4 2 1
但我想获得每一行的单独计数,结果 table 是:
A B C D
1 2 0 00 1 1 0
1 1 0 1
我确定这是某种形式的偶然事件 table 但对于我来说,我无法弄清楚。
我们可以使用 apply
和 MARGIN=1
循环遍历列,转换为 factor
,levels
指定为 unique
个元素 'x',得到 table
un1 <- sort(unique(c(x)))
t(apply(x, 2, function(x) table(factor(x, levels = un1))))
# A B C D
#[1,] 1 2 0 0
#[2,] 0 1 2 0
#[3,] 1 1 0 1
或使用矢量化方法
table(c(col(x)), c(x))
# A B C D
# 1 1 2 0 0
# 2 0 1 2 0
# 3 1 1 0 1