ยกเลิกรายการ str_locate_all ลงในรายการเริ่มต้นและรายการสิ้นสุดที่แยกจากกัน

ฉันใช้ str_locate_all เพื่อรับตำแหน่งเริ่มต้นและจุดสิ้นสุดของรายการรูปแบบในสตริงของฉัน โดยจะส่งคืนรายการพร้อมตำแหน่งเริ่มต้นและหยุดสำหรับการแข่งขันแต่ละนัด ฉันจะแยกตำแหน่งเริ่มต้นและหยุดการแข่งขันทั้งหมดออกเป็นรายการแยกกันได้อย่างไร

library(stringr)

patterns <- c("ABS", "BSDF", "ERIDF", "RTZOP")
string <- "ABSBSDFERIDFRTZOPABSBSDFRTZOPABSBSDFERIDFRTZOP"

matches <- str_locate_all(string, patterns)

ผลลัพธ์:

[[1]]
      start end
[1,]     1   3
[2,]    18  20
[3,]    30  32

[[2]]
       start end
[1,]     4   7
[2,]    21  24
[3,]    33  36

[[3]]
       start end
[1,]     8  12
[2,]    37  41

[[4]]
       start end
[1,]    13  17
[2,]    25  29
[3,]    42  46

สิ่งที่ฉันต้องการ:

start <- c(1, 18, 30, 4, 21, 33, 8, 37, 13, 25, 42)
end <- c(3, 20, 32, 7, 24, 36, 12, 41, 17, 29, 46)

person Nivel    schedule 08.01.2019    source แหล่งที่มา


คำตอบ (1)


ใช้ do.call กับ rbind เพื่อซ้อนรายการเข้าด้วยกัน จากนั้นนำคอลัมน์ที่ต้องการออก

> library(stringr)
> 
> patterns <- c("ABS", "BSDF", "ERIDF", "RTZOP")
> string <- "ABSBSDFERIDFRTZOPABSBSDFRTZOPABSBSDFERIDFRTZOP"
> 
> matches <- str_locate_all(string, patterns)
> 
> all <- do.call(rbind, matches)
> start <- all[, 1]
> stop <- all[, 2]
> start
 [1]  1 18 30  4 21 33  8 37 13 25 42
> stop
 [1]  3 20 32  7 24 36 12 41 17 29 46
person Joseph Clark McIntyre    schedule 08.01.2019
comment
ทำงานได้อย่างสมบูรณ์แบบ! ขอบคุณมาก! - person Nivel; 08.01.2019