计算列表中出现的次数,技巧?
Count the number of appeareances in a list, trick?
我有一个1和0的矩阵。关于这个table的规则如下。
我想计算 1,1 系列出现的次数(其中 1 没有被 0 分隔!),并为 1,1,1 系列做同样的事情。我试过 colSums 但它似乎不是很合适。
最后的矩阵是
t1 t2 t3 t4 t5 t6 t7
[1,] 0 0 0 0 1 1 0
[2,] 0 0 1 1 0 0 1
[3,] 1 1 0 0 0 0 0
[4,] 0 0 1 1 1 0 0
[5,] 0 0 1 1 0 0 0
[6,] 1 1 0 0 0 0 0
[7,] 0 0 0 0 0 0 1
[8,] 0 0 0 0 1 1 0
[9,] 1 1 0 0 1 1 0
[10,] 0 0 0 0 0 1 1
[11,] 1 1 0 0 0 0 0
[12,] 0 0 1 1 0 0 0
[13,] 0 0 0 0 0 0 0
[14,] 0 0 0 0 0 0 1
[15,] 0 0 0 0 0 0 0
因此,对于第一行,我希望有 1 次 1,1 系列和 0 次 1,1,1 系列。对于第 4 行,我希望有 0 次 1,1 系列,但有 1 次 1,1,1 系列。
任何人都可以告诉我下面的 1,1 系列代码有什么问题吗?
occ <- matrix()
occ_temp <- matrix
for (j in 1:nrow(final)){
for (i in 2:7){
if (sum(final[j,i-1:i])==2){occ_temp[j,i-1]=1}
}
occ[j] <- sum(occ_temp)
}
我们可以使用 apply
遍历行,使用 rle
获取 运行-length-type,提取 lengths
其中 values
是 1,检查是否等于 'n1' 和 'n2',并得到 sum
.
n1 <- 2
n2 <- 3
res <- t(apply(m1, 1, FUN=function(x) {
x1 <- with(rle(x), lengths[!!values])
c(sum(x1==n1), sum(x1==n2))
}))
colnames(res) <- paste0("count", c(11, 111))
res
# count11 count111
# [1,] 1 0
# [2,] 1 0
# [3,] 1 0
# [4,] 0 1
# [5,] 1 0
# [6,] 1 0
# [7,] 0 0
# [8,] 1 0
# [9,] 2 0
#[10,] 1 0
#[11,] 1 0
#[12,] 1 0
#[13,] 0 0
#[14,] 0 0
#[15,] 0 0
我有一个1和0的矩阵。关于这个table的规则如下。
我想计算 1,1 系列出现的次数(其中 1 没有被 0 分隔!),并为 1,1,1 系列做同样的事情。我试过 colSums 但它似乎不是很合适。
最后的矩阵是
t1 t2 t3 t4 t5 t6 t7
[1,] 0 0 0 0 1 1 0
[2,] 0 0 1 1 0 0 1
[3,] 1 1 0 0 0 0 0
[4,] 0 0 1 1 1 0 0
[5,] 0 0 1 1 0 0 0
[6,] 1 1 0 0 0 0 0
[7,] 0 0 0 0 0 0 1
[8,] 0 0 0 0 1 1 0
[9,] 1 1 0 0 1 1 0
[10,] 0 0 0 0 0 1 1
[11,] 1 1 0 0 0 0 0
[12,] 0 0 1 1 0 0 0
[13,] 0 0 0 0 0 0 0
[14,] 0 0 0 0 0 0 1
[15,] 0 0 0 0 0 0 0
因此,对于第一行,我希望有 1 次 1,1 系列和 0 次 1,1,1 系列。对于第 4 行,我希望有 0 次 1,1 系列,但有 1 次 1,1,1 系列。
任何人都可以告诉我下面的 1,1 系列代码有什么问题吗?
occ <- matrix()
occ_temp <- matrix
for (j in 1:nrow(final)){
for (i in 2:7){
if (sum(final[j,i-1:i])==2){occ_temp[j,i-1]=1}
}
occ[j] <- sum(occ_temp)
}
我们可以使用 apply
遍历行,使用 rle
获取 运行-length-type,提取 lengths
其中 values
是 1,检查是否等于 'n1' 和 'n2',并得到 sum
.
n1 <- 2
n2 <- 3
res <- t(apply(m1, 1, FUN=function(x) {
x1 <- with(rle(x), lengths[!!values])
c(sum(x1==n1), sum(x1==n2))
}))
colnames(res) <- paste0("count", c(11, 111))
res
# count11 count111
# [1,] 1 0
# [2,] 1 0
# [3,] 1 0
# [4,] 0 1
# [5,] 1 0
# [6,] 1 0
# [7,] 0 0
# [8,] 1 0
# [9,] 2 0
#[10,] 1 0
#[11,] 1 0
#[12,] 1 0
#[13,] 0 0
#[14,] 0 0
#[15,] 0 0