gpt4 book ai didi

r - 如何计算两个观测值二进制组合的数量?

转载 作者:行者123 更新时间:2023-12-03 03:10:16 25 4
gpt4 key购买 nike

在下面的示例中,我想知道 010 序列的数量或 1010 序列的数量。下面是一个可行的示例;

x <- c(1,0,0,1,0,0,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0)

在此示例中,010 序列的数量为 6,1010 序列的数量为 4。

计算连续序列数量的最有效/最简单的方法是什么?

最佳答案

无绳方式:

f = function(x, patt){
if (length(x) == length(patt)) return(as.integer(x == patt))
w = head(seq_along(x), 1L-length(patt))
for (k in seq_along(patt)) w <- w[ x[w + k - 1L] == patt[k] ]
w
}

length(f(x, patt = c(0,1,0))) # 6
length(f(x, patt = c(1,0,1,0))) # 4
<小时/>

替代方案。来自@cryo11,这是另一种方法:

function(x,patt) sum(apply(embed(x,length(patt)),1,function(x) all(!xor(x,patt))))

或其他变体:

function(x,patt) sum(!colSums( xor(patt, t(embed(x,length(patt)))) ))

或使用 data.table:

library(data.table)
setkey(setDT(shift(x, seq_along(patt), type = "lead")))[as.list(patt), .N]

(shift 函数与embed 非常相似。)

关于r - 如何计算两个观测值二进制组合的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41555051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com