计算单元格等于文本

时间:2016-07-09 04:56:00

标签: r text count find-occurrences

我有一个矩阵,其中包含的值等于“J”或“N”。这些值显示在3个,2个或1个块中,并且没有值。我想多次计算一个3,2和1的块出现。当我用J替换J和N然后根据下一个函数计算它时,我可以设法做到这一点。但是,你怎么能把它分开J和N.谢谢

矩阵:

      t1 t2 t3 t4 t5 t6 t7
 [1,]  0  0  0  0  J  J  0
 [2,]  0  0  N  N  0  0  N
 [3,]  J  J  J  0  0  0  0
 [4,]  0  0  N  N  N  0  0

J

的代码(来自聊天中的某个人)
n1 <- 2
n2 <- 3
res <- t(apply(Calendar, "J", FUN=function(x) {
       x1 <- with(rle(x), lengths[!!values])
       c(sum(x1==n1), sum(x1==n2))
}))
colnames(res) <- paste0("count", c(11, 111))
res

嗯它不起作用。最后我想有一个矩阵(根据初始矩阵)

J3 J2 J1 N3 N2 N1
1  2  0  1  1  1

编辑并要求澄清:假设这是一个日历,而1-7是一周中的几天,那么这个潜在矩阵的期望答案是什么:

矩阵:

      t1 t2 t3 t4 t5 t6 t7
 [1,]  0  0  0  0  0  J  J
 [2,]  J  0  N  N  0  0  N
 [3,]  J  J  J  0  0  0  N
 [4,]  N  0  N  N  N  0  0

1 个答案:

答案 0 :(得分:1)

我们可以使用rle

lst1 <- lapply(c("J", "N"), function(nm) t(apply(Calendar == nm, 1,
          FUN = function(x) {
             x1 <- with(rle(x), lengths[values])
             table(factor(x1, levels=1:3))})))
`row.names<-`(t(sapply(lst1, colSums)), c("J", "N"))