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