我有一个带有两种字符的向量,如下所示。
dat <- c(rep("A", 3), rep("B", 2), rep("A", 5), rep("B", 4), rep("A", 8))
包含“A”和“B”。我想在“A” - &gt;时找到所有指数“B”和“B” - &gt; “一个”。
例如,
> dat
[1] "A" "A" "A" "B" "B" "A" "A" "A" "A" "A" "B" "B" "B" "B" "A" "A" "A" "A" "A" "A" "A" "A"
我想计算两个数字向量:A2B应该是(3,10)而B2A应该是(5,14)。
答案 0 :(得分:1)
diffs <- diff(as.integer(as.factor(dat)))
A2B <- which(diffs == 1L)
B2A <- which(diffs == - 1L)
答案 1 :(得分:1)
创建数据的行程编码表示
r = rle(dat)
然后提取尾随过渡的累积索引
cumsum(r$lengths)[which(r$value == "B") - 1L] # A2B
cumsum(r$lengths)[which(r$value == "A") - 1L] # B2A