这可能是一个初学者的问题,但我无法在网上找到答案...也许是因为我不擅长描述问题。
我想创建按行分开的名义数据频率表。例如,在此矩阵中:
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
但是我想为每一行获取单独的计数,结果表为:
A B C D
1 2 0 00 1 1 0
1 1 0 1
我确定这是列联表的某个版本,但就我的一生而言,我无法弄清楚。
答案 0 :(得分:1)
我们可以使用apply
和MARGIN=1
来遍历各列,并用指定为'x'的factor
个元素的levels
转换为unique
,并获取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