在R中查找字符向量中的变化索引

时间:2017-01-12 12:10:16

标签: r

我有一个带有两种字符的向量,如下所示。

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)。

2 个答案:

答案 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