删除同一列中具有匹配单词的行,并匹配多列中的值

时间:2016-10-16 19:13:25

标签: r string-matching delete-row

我有一个超过20000行(data3)的数据框,其中一个列名为“collector”。在本专栏中,我有一些单词,例如:“Ruiz Galvis Marta”。我需要将每一行与我的数据框中的所有其他行进行比较,并删除df $ collector列中的一个或多个单词与所有其他行中同一列中的单词匹配的那些行,并使用该值在“sample”列和“number”列中。那就是:

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

感谢您的帮助!

1 个答案:

答案 0 :(得分: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"