2014-10-02 3 views
2

Похоже, у меня есть еще одна проблема дело со строками в R ...Обнаружение дубликатов в строке

То, что я после довольно проста, но я до сих пор найти способ сделать это, несмотря на многие часы поиск здесь и в другом месте.

В принципе, у меня есть столбец в таблице данных («Уникальный идентификатор»), который содержит строку слов, которую я хочу классифицировать в зависимости от того, содержит ли она несколько экземпляров одного и того же слова.

снимок моих данных:

Unique ID 
#[1,] Display-imp 
#[2,] Display-clk 
#[3,] Display-clk Display-imp Display-clk 
#[4,] Display-imp Search Affiliate Display-imp 
#[5,] Display-imp Display-imp 
#[6,] Display-clk Display-clk Display-clk 

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

Таким образом, строки 1, 2, 5, 6 будут помечены под этим методом.

Я думал об использовании функции str_count из пакета stringr, но для этого требуется указать шаблон, который я хочу обнаружить, тогда как меня интересует только то, что какое-либо слово появляется несколько раз в строке. И в любом случае, я не знаю, что слова будут заранее, поэтому не могу указать какой-то список для ссылки.

Любая помощь очень ценится еще раз!

+1

'strsplit',' unique' и 'length'? – A5C1D2H2I1M1N2O1R2T1

+1

Как строки 1 и 2 содержат несколько экземпляров одного и того же слова, а 3 и 4 - нет? – rawr

ответ

2

Предполагая, что у вас есть что-то вроде этого:

df <- data.frame(
    Unique_ID = c("Display-imp", "Display-clk", 
       "Display-clk Display-imp Display-clk", 
       "Display-imp Search Affiliate Display-imp", 
       "Display-imp Display-imp", 
       "Display-clk Display-clk Display-clk")) 

Просто использовать strsplit, unique и length.

counts <- vapply(strsplit(as.character(df$Unique_ID), " "), 
     function(x) length(unique(x)), 1L) 
counts 
# [1] 1 1 2 3 1 1 

Используйте which, чтобы сказать вам, какие строки имеют только 1 уникальное значение:

which(counts == 1) 
# [1] 1 2 5 6 
+0

Фантастический! Это сработало отлично! Большое вам спасибо за вашу помощь – Rhysj

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