2015-10-06 2 views
0

Предположим, у меня очень большая таблица данных, один столбец которой - «ManufacturerName». Данные не были введены равномерно, поэтому это довольно грязно. Например, могут быть такие наблюдения, как:Консолидация уровней факторов таблицы данных в R

ABC Inc 
ABC, Inc 
ABC Incorporated 
A.B.C. 
... 
Joe Shmos Plumbing 
Joe Shmo Plumbing 
... 

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

levels(df$ManufacturerName) <- list(ABC=c("ABC", "A.B.C", ....), JoeShmoPlumbing=c(...)) 

Но я пытаюсь думать о автоматическом решении. Очевидно, что это не будет идеальным, поскольку я не могу предвидеть каждый тип перестановок в таблице данных. Но, возможно, что-то, что ищет уровни факторов, вытесняет знаки пунктуации/специальные символы и создает уровни, основанные на обычных первых словах. Или любые другие идеи. Благодаря!

+1

data.table относится к определенному классу R, который использует пакет data.table. Насколько я могу судить, ваш вопрос не имеет к этому никакого отношения (в этом случае он должен быть снят с тегов на почте). – Frank

+0

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

+0

Хорошо. Трудно сказать без воспроизводимого примера. – Frank

ответ

0

Посмотрите на пакет stringdist. Для начала, вы могли бы сделать что-то вроде этого:

library(stringdist) 

x <- c("ABC Inc", "ABC, Inc", "ABC Incorporated", "A.B.C.", "Joe Shmos Plumbing", "Joe Shmo Plumbing") 
d <- stringdistmatrix(x) 
# 1 2 3 4 5 
# 2 1    
# 3 9 10   
# 4 6 7 15  
# 5 16 16 16 18 
# 6 15 15 15 17 1 

Для получения дополнительной справки см ?stringdistmatrix или сделать поиск на StackOverflow для нечеткого соответствия, приближенного соответствия строки, функции строки расстояния и agrep.