假设dat 包含您的数据,我们使用strsplit() 来处理
tt <- matrix(unlist(strsplit(dat$V3, split = "")), ncol = 13, byrow = TRUE)
给予:
> tt
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
[1,] "a" "a" "a" "a" "a" "a" "b" "b" "b" "a" "b" "a" "b"
[2,] "a" "b" "a" "b" "a" "a" "a" "b" "a" "a" "a" "b" "b"
[3,] "b" "a" "b" "b" "b" "a" "b" "a" "a" "b" "b" "b" "a"
我们可以通过注意正确设置级别来获得所需的结果:
apply(tt, 2, function(x) c(table(factor(x, levels = c("a","b")))))
给出:
> apply(tt, 2, function(x) c(table(factor(x, levels = c("a","b")))))
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
a 2 2 2 1 2 3 1 1 2 2 1 1 1
b 1 1 1 2 1 0 2 2 1 1 2 2 2
要自动选择适当的级别,我们可以执行以下操作:
> lev <- levels(factor(tt))
> apply(tt, 2, function(x, levels) c(table(factor(x, levels = lev))),
+ levels = lev)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
a 2 2 2 1 2 3 1 1 2 2 1 1 1
b 1 1 1 2 1 0 2 2 1 1 2 2 2
在第一行中,我们将tt 视为向量,并在将tt 临时转换为因子后提取级别。然后,我们将这些级别 (lev) 提供给 apply() 步骤,而不是明确说明级别。