Заменить слова из одного вектора строк пробелами, если они совпадают в другом векторе строк - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь найти любое совпадение с "City" внутри "Cust.Name".Если есть совпадение, замените наличие "City" пробелом в "Cust.Name".Поэтому будет отображаться только "Cust.Name" без "City".

Cust.Name <- as.data.frame(c("Eric Lee", "Mendham Middle School", "John Doe", "Johnson Elementary"))
colnames(Cust.Name) <- "Cust.Name"

City <- as.data.frame(c("Durham", "Mendham", "Elon", "Johnson"))
colnames(City) <- "City"

Customer = cbind(Cust.Name , City)
Customer$Cust.Name = as.character(Customer$Cust.Name)
Customer$City = as.character(Customer$City)

Я пробовал это:

Customer$Cust.Name = sapply(gsub(pattern = Customer$City , replacement = '' , x = Customer$Cust.Name), function(x) x )

Желаемые результаты должны быть:

"Eric Lee" , "Middle School" , "John Doe" , "Elementary"

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Вы можете использовать gsub, то есть

gsub(paste(City$City, collapse = '|'), '', Cust.Name$Cust.Name)
#[1] "Eric Lee"       " Middle School" "John Doe"       " Elementary"   
0 голосов
/ 19 февраля 2019
library(tidyverse)

cust_name <- c("Eric Lee", "Mendham Middle School", "John Doe", "Johnson Elementary")
city <- c("Durham", "Mendham", "Elon", "Johnson")

str_replace_all(cust_name, city, "") %>% str_squish()
# [1] "Eric Lee"      "Middle School" "John Doe"      "Elementary" 

Указанное выше работает только в том случае, если векторы работают в «парах» - в противном случае вы захотите paste(..., collapse = "|") город.Например:

# Note the new order of `cust_name`
cust_name <- c("Eric Lee", "John Doe", "Mendham Middle School", "Johnson Elementary")
city <- c("Durham", "Mendham", "Elon", "Johnson")

str_replace_all(cust_name, paste(city, collapse = "|"), "") %>%
  str_squish()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...