Как я могу удалить слово до и после определенного слова? - PullRequest
1 голос
/ 08 октября 2019

У меня огромный текстовый файл с именами, в котором я хочу удалить полное имя каждого с определенным отчеством. Например, скажем, я хочу удалить всех со вторым именем Том

Строка 1: Джон Эндрю Смит, Тобиас Том Джонс, Антон Морвол Херт, Энди Том Смит, ...

Строка 2: Уэйд Том Джобс, Рэндал Роберт Родес, ...

Спасибо

Ответы [ 2 ]

2 голосов
/ 08 октября 2019

Вы можете прочитать текстовый файл в R, разделить значения через запятую в separate_rows и затем удалить те строки, которые имеют "Tom" в качестве отчества. Я бы посоветовал хранить данные там, где каждая запись находится в отдельной строке.

library(dplyr)

df %>%
  tidyr::separate_rows(V1, sep = ", ") %>%
  filter(!grepl("\\w\\s*Tom\\s*\\w", V1))

#                V1
#1 John Andrew Smith
#2  Anton Morvol Tom
#3  Tom Robert Rodes

Если вы хотите вернуть ту же структуру обратно

df %>%
  mutate(row = row_number()) %>%
  tidyr::separate_rows(V1, sep = ", ") %>%
  filter(!grepl("\\w\\s*Tom\\s*\\w", V1)) %>%
  group_by(row) %>%
  summarise(V1 = toString(V1))

data

Немного изменен ввод для целей тестирования.

text = "John Andrew Smith, Tobias Tom Jones, Anton Morvol Tom, Andy Tom Smith
         Wade Tom Jobs, Tom Robert Rodes"
df <- read.table(text = text, sep = "|", strip.white = TRUE)
1 голос
/ 08 октября 2019

Мы можем сделать это в base R

grep("\\s\\bTom\\b\\s", unlist(strsplit(df$V1, ", ")), 
       invert = TRUE, value = TRUE)
#[1] "John Andrew Smith" "Anton Morvol Tom"  "Tom Robert Rodes" 

data

df <- structure(list(V1 = c("John Andrew Smith, Tobias Tom Jones,
      Anton Morvol Tom, Andy Tom Smith", 
"Wade Tom Jobs, Tom Robert Rodes")), 
        row.names = c(NA, -2L), class = "data.frame")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...