Фильтрация столбца (бизнес) имен и условное удаление строки, если она не уникальна - PullRequest
0 голосов
/ 26 мая 2020

У меня есть названия компаний, которые я скопировал в Интернете из различных источников. Некоторые сайты были неточными и отбрасывали «In c.», «In c», «Incorporated», «LTD», «LL C» и т. Д. c. Предположим, у меня есть только имена, Я просто хочу сократить список до приемлемого количества, чтобы я мог просмотреть его оттуда и внести коррективы. Мои реальные данные - 18 000 элементов, поэтому удаление неправильных, таких как Names [, - c (1,2342,17232)], нецелесообразно.

Вот пример:

Names = c("ABC Services",                   #drop
          "ABC Services, Inc.",             
          "ABC Systems",                    #drop
          "ABC Systems Co.",                  
          "ABC Systems Incorporated",         
          "x Engineering, Inc.",                   
          "x Engineering Incorporated",     #drop     
          "x Green Energy Systems Inc.",           
          "XYZ & Electric",                    
          "XYZ Development, Northwest, LLC",   
          "XYZ Enterprises",                #drop   
          "XYZ Enterprises Inc",               
          "XYZ Generation",                    
          "XYZ Systems",                    #drop 
          "XYZ Systems, Inc",          
          "XYZ Systems, LLC"     
)
#count the number of words
WordCount = sapply(strsplit(Names, " "), length);  

#subtract the first element, put NA at end to retain length
WordCountMinusFirstElement=c(WordCount[-1],NA);    

#check consecutive modulo x_n+1 %% x_n, to remove pattern of non-increasing word pattern 
    #this just presents a vectorizable way to remove consecutive AND unique names
Consecutive = WordCountMinusFirstElement %% WordCount;    

df=data.frame(Names,WordCount,WordCountMinusFirstElement,Consecutive);
    "dimensions:";dim(df)

#as a principle I ought to keep my last row since my trick doesn't work here.
last = df[nrow(df),]
df = rbind.data.frame( df[which(!(df$Consecutive==0)),],last);
    "dimensions:";dim(df)

Частые шаблоны: первые n символов, «In c.» vs ", Incorporated" и др. c. Я не могу отбросить «In c.», «In c», «Incorporated», «LTD», «LL C», «Co.» и т. Д. c., Потому что я ' они мне понадобятся, так что, похоже, я застрял в подсчете слов.

« Самая умная вещь », которую я могу придумать, - это НЕ рассматривать уникальные и последовательные слова с модулем оператор, например, x_{n+1} %% x_{n}=0.

Я хотел бы знать, что, по мнению других, было бы эффективным способом двигаться дальше. Было бы лучше просто охарактеризовать тип «Incorporated», «LTD», «LL C», «Co.», et c. И удалить их из позиции последнего слова на этом этапе, и только go с unique(df$Name) в этот момент? Лучше ли какой-нибудь рекурсивный поиск по строкам? Можно ли поместить это в dplyr, чтобы его было легко читать?

Спасибо!

...