在R中查找共享序列的长度

时间:2014-05-01 10:00:25

标签: r

我有一个问题。我有一个由两行组成的表

00012121000012100110021212012121
11220212121221121212121212200000
    -             -       -

带有数字的两行下面的行仅用于说明。我想开始比较 - 中间的两行,然后找到两个不相容的停止2/0(左)和0/2右的位置。它也可能是另一种方式(2/0位于右侧,0/2位于左侧)。我知道从另一个来源中间开始的位置。有没有一种简单的方法可以在左边找到2/0或0/2,在右边找到0/2 2/0(取决于左边的内容)?并告诉职位/

1 个答案:

答案 0 :(得分:1)

这不是最有效的方法,但您可以使用简单的索引比较,例如:

s <- c("00012121000012100110021212012121",
       "11220212121221121212121212200000",
       "    -             -       -     ")
l <- strsplit(s, "")
l[1:2] <- lapply(l[1:2], as.numeric)

d <- l[[1]]-l[[2]]
#  [1] -1 -1 -2 -1  2 -1  1 -1 ...

## stop rule left: 2/0 => 2
stopsleft <- which(d == 2)
# [1]  5 29 31

## stop rule right: 0/2 => -2
stopsright <- which(d == -2)
# [1]  3 10 12 16 20 27

middlepos <- 19

stopleft <- tail(stopsleft[stopsleft < middlepos], 1)
# [1] 5

stopright <- head(stopsright[stopsright > middlepos], 1)
# [1] 20

target <- grep("-", l[[3]])
# [1]  5 19 27

请注意,我的右手停止位置与您的不同。我不知道你为什么选择27号而不是20号。