извлечь строку в R с помощью регулярного выражения для переменного числа экземпляров - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть строковый столбец (data.table), который мне нужно проанализировать на основе шаблона (текст между '-') и определенного (но переменного) числа экземпляров этого шаблона, и я не уверенкак это сделать с помощью регулярного выражения:

> test <- c("AAA-bb-ccc", "abcd-efgh","blah", "blah-blah-blah-blah")

скажем, предопределенное количество экземпляров - это i.

> i = 1
> output
"AAA"  "abcd"  "blah"  "blah

> i = 2
> output
"bb"  "efgh"  ""  "blah"


> i= 3
> output
"ccc"  ""  ""  "blah"

как бы я использовал общее регулярное выражение с использованием i, которое бы достигло этого?

Ответы [ 3 ]

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

Для i=3 вы можете попробовать

unlist(lapply(strsplit(test,split = '-'),'[',3)) 
[1] "ccc"  NA     NA     "blah"
0 голосов
/ 05 декабря 2018

Мы также можем использовать tokenize_regex из пакета tokenizers, а затем data.table::transpose и cbind соответствующие столбцы в data.table

test <- c("AAA-bb-ccc", "abcd-efgh","blah", "blah-blah-blah-blah")

library(tokenizers)
library(data.table)
test <- transpose(tokenize_regex(test, "-"), fill = "")

i <- 1:3
as.data.table(do.call(cbind, test[i]))
#     V1   V2   V3
#1:  AAA   bb  ccc
#2: abcd efgh
#3: blah
#4: blah blah blah
0 голосов
/ 05 декабря 2018

Мы можем создать функцию, которая разделяется на «-» и возвращает i-е значение.

get_i_th_element <- function(test, i) {
   sapply(strsplit(test, "-"), function(x) if(length(x) >= i) x[[i]] else "")
}

get_i_th_element(test, 1)
#[1] "AAA"  "abcd" "blah" "blah"

get_i_th_element(test, 3)
#[1] "ccc"  ""     ""     "blah"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...