R: диапазон фильтра / поднабора строк на основе ячеек, содержащих конкретное значение - PullRequest
0 голосов
/ 13 декабря 2018

Недавно я получил ответ на поднабор диапазона строк на основе начальных и конечных значений / идентификаторов в определенном столбце - ответ можно прочитать здесь .

То, что я надеюсь получить некоторую помощь в этот раз, - это делать то же самое (то есть подмножество всех строк между каждым экземпляром идентификатора), за исключением того, что рассматриваемый идентификатор встроен в предложение.Таким образом, сам идентификатор содержится в ячейке с другим текстом.

Пример:

X1                      X2
'hello this is a test'   1
'identifier 1234'        2
'hello'                  3
'hello'                  4
'hello 1234'             5
'hello again'            6

Предполагая, что идентификатор для строк, которые я ищу в подмножестве, равен '1234', вывод IНадеюсь, будет 2,3,4,5.Идентификатор никогда не будет отображаться более двух раз, поэтому есть четкие точки начала и окончания.

Я попытался объединить фильтр, grepl и между ними, но мне удалось отфильтровать только строки с идентификатором, а не строки вмежду идентификаторами.

Надеюсь, это имеет смысл!

1 Ответ

0 голосов
/ 13 декабря 2018

Поскольку существует только один экземпляр «идентификатора», который задает «начало / остановку», используйте grep, чтобы получить индекс строки, соответствующий шаблону, получить последовательность между началом и концом (:)и подмножество значений «X2»

i1 <- grep('1234', df1$X1)
df1$X2[i1[1]:i1[2]]
#[1] 2 3 4 5

data

df1 <- structure(list(X1 = c("hello this is a test", "identifier 1234", 
"hello", "hello", "hello 1234", "hello again"), X2 = 1:6), 
  class = "data.frame", row.names = c(NA, -6L))
...