2014-12-08 4 views
-2

У меня есть один data.frame с несколькими столбцами. Первый столбец содержит названия компаний. Они были введены пользователями, и многие значения содержат похожие строки, представляющие один и тот же объект. Например, Компания A Pty. Компания A Pty. Ltd. Компания A Грузия.слияние строк data.frame на основе аналогичных строк в r

Я хотел бы заменить эти варианты одной общей строкой Company A в другой колонке. Я посмотрел на stringdist и другие функции, но они, похоже, не поддерживают этот вариант использования.

Это позволило бы мне обобщить/скомпилировать на основе этой общей строки.

Инструменты сторонних такие как Google Refine будет работать - но я предпочел бы работать в R.

ответ

1

Используйте agrep функцию.

Исходные данные:

x <- c("Company A Pty.","BigData GMBH","Company A Pty. Ltd.","Red Pants Warsaw", "Company A Georgia", "Red Pants Ltd", "BlueSocks House") 

первый аргумент шаблон, который вы хотите посмотреть в данных (например, х [1]), второй, где вы хотите посмотреть, max это максимальное расстояние две строки могут отличаться , value означает, что мы хотим получить строки вместо индексов вектора.

Если нет совпадения, вы можете изменить max, но будьте осторожны! Больше - не всегда лучше.

agrep(x[1],x, max=0.1, value=TRUE) 
## [1] "Company A Pty."  "Company A Pty. Ltd." 
agrep(x[1],x, max=0.3, value=TRUE) 
## [1] "Company A Pty."  "Company A Pty. Ltd." "Company A Georgia" 
agrep(x[1],x, max=0.7, value=TRUE) 
## [1] "Company A Pty."  "Company A Pty. Ltd." "Company A Georgia" "Red Pants Ltd" 

Более того, это не симметрия. «Красные штаны Варшавы» (x [4]) не соответствовали «Red Pants Ltd» (x [6]), но он работал другим способом - x [6] соответствовал x [4]. Помните об этом.

agrep(x[4],x, max=0.2, value=TRUE) 
## [1] "Red Pants Warsaw" 
agrep(x[6],x, max=0.2, value=TRUE) 
## [1] "Red Pants Warsaw" "Red Pants Ltd"