частичное совпадение строк символов в R - PullRequest
0 голосов
/ 23 апреля 2019

Я хочу сделать новую колонку типа автомобиля из полного имени автомобиля.

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

y = c("Volkswagan The Newbeatle", "Cadilac CTS", "Cadilac CTS-V",....)

У меня есть вектор типа автомобиля, фактически каждой компании.Это всего лишь пример.

x = c("SLR", "Newbeatle", "300C", "CTS-V", "Spider", "CTS", ...)

Цель - вернуть тип автомобиля путем сопоставления с вектором полного имени автомобиля.

result = c("Newbeatle", "CTS", "CTS-V", ...)

length(result)==length(y)
## TRUE

Я уже получил результат.но профессор просит меня не использовать «для» и «если».

Это мой код R (например).

library(tidyverse)

# This is cartype
x <- c("abc", "def", "xyz", "lmn")
# This is car full name
y <- c("abc xxx", "lmn xxx", "xxx xxx xxx", "xyz xxxx x x", "xxx xxx", "def xxx") 
# Split car name by blank(" ")
ys <- str_split(y, " ", simplify = T) 

# I want to new colume.
result <- NULL

for(i in 1:length(ys)){
  for(j in 1:length(x)){
    if(length(grep(x[j], ys[i]))>0){
      result[i]=x[j]
    }
  }
}

> result
[1] "abc" "lmn" NA    "xyz" NA    "def"

Это работа, но покажи предупреждение и профессоране рекомендуется использовать циклические функции «для» и «если» для этой цели.

1 Ответ

1 голос
/ 23 апреля 2019

Как то так?

x <- c("abc", "def", "xyz", "lmn")
y <- c("abc xxx", "lmn xxx", "xxx xxx xxx", "xyz xxxx x x", "xxx xxx", "def xxx") 
ys <- str_split(y, " ", simplify = T) 
unlist(lapply(ys, function(l){x[l == x]}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...