Проверьте слова в кадре данных - PullRequest
0 голосов
/ 03 июня 2018

У меня есть два кадра данных A и B. Я хочу проверить, существуют ли уникальные слова кадра данных A в кадре данных B. Если существует, сохраните это слово, в противном случае удалите слово из каждой строки кадра данных B.

A <- data.frame(name = c(
  "X-ray right leg arteries",
  "consultation of gynecologist",
  "x-ray leg arteries",
  "x-ray leg with 20km distance"
), stringsAsFactors = F)

B <- data.frame(name = c(
  "X-ray left leg arteries",
  "consultation (inspection) of gynecalogist",
  "MRI right leg arteries",
  "X-ray right leg arteries with special care"
), stringsAsFactors = F)


k=unique(unlist(strsplit(A$name, " ")))
d = do.call(rbind, lapply(B$name, function(z) {
  xx = lapply(lapply(k, function(x) grepl(x, unlist(strsplit(z, " ")), fixed = T)), which)
  paste(k[sapply(xx, function(x) length(x)>0)], collapse = " ")
}
))

Я уже решил это.Просто хотел узнать, есть ли эффективный способ сделать это, так как в моем реальном наборе данных более 15 тысяч строк.

1 Ответ

0 голосов
/ 03 июня 2018

Вместо нескольких циклов мы можем извлечь уникальные слова из 'B', используя 'k', а затем paste эти элементы вместе

library(stringr)
unlist(lapply(str_extract_all(B$name, paste(k, collapse="|")), 
             paste, collapse=' '))
...