2016-10-16 3 views
-1

У меня есть кадр данных с более чем 20000 строк (data3) с столбцом с именем «collector». В этой колонке у меня есть строки слов, например: «Руис Галвис Марта». Мне нужно сравнить каждую строку со всеми другими строками в моем фрейме данных и удалить те строки, в которых одно или несколько слов в столбце df $ collector совпадают со словами в одном столбце во всех остальных строках и со значением в столбце «образец» и «номер» столбца. То есть:Удалить строки с совпадающими словами в одном столбце и совпадающие значения в нескольких столбцах

INPUT: 

Collector     Times  sample number 
Ruiz Galvis Marta   9   SP.1  one   
Smith et al Marta   8   SP.2  two 
Ruiz Andres Allan   4   SP.1  one 


EXPECTED OUTPUT 

Collector     Times  sample number   
Smith et al Marta    8   SP.2  two 

Благодарим за помощь!

ответ

2

Вероятно, будет медленным, как ад, но

dd <- data.frame(Collector = c('Ruiz Galvis Marta', 'Smith et al Marta', 'Ruiz Andres Allan'), 
       stringsAsFactors = FALSE) 

## create a matrix with the words by column 
tt <- strsplit(dd$Collector, '\\s+') 
mm <- do.call('rbind', lapply(tt, `length<-`, max(lengths(tt)))) 

## remove all duplicates 
dd[rowSums(apply(mm, 2, function(x) 
    duplicated(x) | duplicated(x, fromLast = TRUE))) == 0, ] 

# [1] "Smith et al Marta" 
+0

спасибо это дало хорошие подсказки. Я действительно не знал, с чего начать! –

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

  • Нет связанных вопросов^_^