2015-02-03 3 views
0

Я ищу, чтобы создать новый столбец из пересекающихся слов из двух столбцов, содержащей строки:Создание нового столбца с пересекающимися словами из двух других столбцов в R

sometext1 <- c('this is a text entry','here is another text entry','something else') 
sometext2 <- c('text entry','text entry','no match here') 
texts <- data.frame(sometext1=sometext1, sometext2=sometext2,stringsAsFactors=F) 

Это моя попытка, которая не дала любой матч:

texts$common <- paste(Reduce(intersect, list(strsplit(texts$sometext1,' '), strsplit(texts$sometext2,' '))), sep=" ", collapse=" ") 

тексты $ общее должно выглядеть примерно так:

1  'text entry' 
2  'text entry' 
3  '' 

Спасибо!

+1

вы имеете в виду, чтобы найти самую длинную общую последовательность слов? –

+1

Кстати, вы могли бы избежать необходимости конвертировать символы 'sometext1' и' sometext2' в символ, используя аргумент 'stringsAsFactors = F' в команде' data.frame'. –

+0

Также вы проверили эту ссылку: http://stackoverflow.com/questions/16196327/find-common-substrings-between-two-character-variables? –

ответ

3

Начиная с этого data.frame:

> texts 
#     sometext1  sometext2 
#1  this is a text entry text entry 
#2 here is another text entry text entry 
#3    something else no match here 

Вы можете использовать следующий подход. Начало путем разделения записей в каждом из столбцов строк на пространствах, используя lapply:

x <- lapply(texts, strsplit, " ") 

Затем, используя Map, чтобы применить intersect к соответствующим подразделам элементов первого элемента в х (x[[1]]) - представляет собой первый столбец в тексты - и второй элемент х (x[[2]]) - представляет собой второй столбец в текстах:

x <- Map(intersect, x[[1]], x[[2]]) 

Наконец, использование sapply для запуска по списку и вставки/свернуть элементы вместе и записать их в новый столбец:

texts$common <- sapply(x, paste0, collapse = " ") 

Результат:

> texts 
#     sometext1  sometext2  common 
#1  this is a text entry text entry text entry 
#2 here is another text entry text entry text entry 
#3    something else no match here   
Смежные вопросы