2016-07-25 5 views
-6

Я хотел бы написать функцию, сравнить две строки в R. Более точно, если есть эти данные:Сравнивая две версии одной и той же строки

data <- list(
    "First sentence.", 
    "Very first sentence.", 
    "Very first and only one sentences." 
) 

Я хотел бы выход быть:

[1] "Very"     " and only one sentences" 

Мой выход построен всей подстрокой, которая не включена в предыдущую. Например:

2nd vs 1st, удалите соответствующую строку - «первое предложение». - со второго, поэтому результат «Очень».

#  "First sentence." 
# "Very first sentence." 
# match: ^^^^^^^^^^^^^^^ 

Теперь сравните третий против 2, удалить соответствующие строки - «очень первый» - с 3-го, так что результат «и только один предложения».

#  "Very first sentence." 
#  "Very first and only one sentences." 
# match: ^^^^^^^^^^ 

Затем сравните четвёртую против 3, и т.д. ...

Так на основе этого примера мой вывод должен быть:

c("Very", " and only one sentences") 
# [1] "Very"     " and only one sentences" 

ответ

2

Вот tidyverse подход:

library(dplyr) 
library(tidyr) 

# put data in a data.frame 
data_frame(string = unlist(data)) %>% 
    # add ID column so we can recombine later 
    add_rownames('id') %>% 
    # add a lagged column to compare against 
    mutate(string2 = lag(string)) %>% 
    # break strings into words 
    separate_rows(string) %>% 
    # evaluate the following calls rowwise (until regrouped) 
    rowwise() %>% 
    # chop to rows with a string to compare against, 
    filter(!is.na(string2), 
      # where the word is not in the comparison string 
      !grepl(string, string2, ignore.case = TRUE)) %>% 
    # regroup by ID 
    group_by(id) %>% 
    # reassemble strings 
    summarise(string = paste(string, collapse = ' ')) 

## # A tibble: 2 x 2 
##  id     string 
## <chr>     <chr> 
## 1  2     Very 
## 2  3 and only one sentences. 

Выбирайте string, если вы хотите только вектор, добавив

+0

Большое спасибо, но это решение, если в тексте есть одно и то же слово (реальные данные намного дольше) –

+0

Я тестировал его, и он не дает правильного вывода, если 'данные <- список ( « Первое предложение »., « Очень первое предложение. предложение. ", " Очень первое предложение и только одно предложение. " )' –

+0

Отредактировано дальше, чтобы следовать вашей логике более подробно. – alistaire

Смежные вопросы