Извлечение строки слов из строковых векторных данных - PullRequest
2 голосов
/ 26 мая 2020

У меня есть строковые векторные данные, как показано ниже

Data
Posted by Mohit Garg on May 7, 2016
Posted by Dr. Lokesh Garg on April 8, 2018
Posted by Lokesh.G.S  on June 11, 2001
Posted by Mohit.G.S. on July 23, 2005
Posted by Dr.Mohit G Kumar Saha on August 2, 2019

Я использовал функцию str_extract () как

str_extract(Data, "Posted by \\w+. \\w+ \\w+")

Он сгенерировал вывод как

[1] "Posted by Mohit Garg on"   "Posted by Dr. Lokesh Garg" NA                         
[4] NA                          NA  

Я хочу, чтобы на выходе было

[1] "Posted by Mohit Garg on"   "Posted by Dr. Lokesh Garg"  "Posted by Lokesh.G.S"                       
[4] "Posted by Mohit.G.S."                     "Posted by Dr.Mohit G Kumar Saha"

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

Вы можете использовать sub и удалить on и все после него с помощью *on.*.

sub(" +?on.*$", "", Data)
#[1] "Posted by momon"                 "Posted by on Mohit Garg"        
#[3] "Posted by Dr. Lokesh Garg"       "Posted by Lokesh.G.S"           
#[5] "Posted by Mohit.G.S."            "Posted by Dr.Mohit G Kumar Saha"

Или с perl = TRUE

sub("(.*) +on.*", "\\1", Data, perl = TRUE)

Данные:

Data <- c("Posted by momon on Monday 29 Feb 2020"
, "Posted by on Mohit Garg on May 7, 2016"
, "Posted by Dr. Lokesh Garg on April 8, 2018"
, "Posted by Lokesh.G.S  on June 11, 2001"
, "Posted by Mohit.G.S. on July 23, 2005"
, "Posted by Dr.Mohit G Kumar Saha on August 2, 2019")

Посмотрите на компилятор регулярных выражений R, работающий по-разному для данного регулярного выражения .

2 голосов
/ 26 мая 2020

Вероятно, вы можете попробовать:

stringr::str_extract(df$Data, "Posted by .+?(?=\\s+on)")

#[1] "Posted by Mohit Garg" "Posted by Dr. Lokesh Garg"  "Posted by Lokesh.G.S"
#[4] "Posted by Mohit.G.S." "Posted by Dr.Mohit G Kumar Saha"

Это извлекает все от "Posted by" до "on" за исключением "on".


То же самое в базе R:

sub(".*(Posted by .+?)(?=\\s+on).*", '\\1', df$Data, perl = TRUE) 

данные

df <- structure(list(Data = c("Posted by Mohit Garg on May 7, 2016", 
"Posted by Dr. Lokesh Garg on April 8, 2018", "Posted by Lokesh.G.S  on June 11, 2001", 
"Posted by Mohit.G.S. on July 23, 2005", "Posted by Dr.Mohit G Kumar Saha on August 2, 2019"
)), class = "data.frame", row.names = c(NA, -5L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...