R: Как сопоставить строки переменной длины в столбцах данных с разными номерами строк? - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть два фрейма данных в R с разным количеством строк. У df1 есть 2 столбца с 12000+ строками, а у df2 <200 строк. Оба кадра данных имеют строки в качестве наблюдений. Пример из df1: </p>

Name = c("7PR SRO.","7PR","3XL INC","ACME INC","ACME INCORP")
abbr = c("7PR","7PR","3XL","ACME","ACME")
df1<- data.frame(Name, abbr, stringAsFactors=FALSE)

Второй фрейм данных df2 имеет тот же столбец имени, что и df 1. У него был только столбец имени, но для сопоставления записей строк я слил их с df1 с помощью функции слияния. Но я все равно получил около 100+ строк с NA в столбце abbr. Пример:

df2<- data.frame(Name = c("7PR S.R.O.", "3XL LLC", "ACME Ltd"), stringAsFactors=FALSE)

Имя столбца df2 также имеет аналогичные названия компаний, такие как df1, но могут быть изменения в пунктуации или изменения с «Corp» на «Ltd» et c. В основном я хочу 3XL как abbr, независимо от того, является ли его LL C или Ltd после имени. Я попытался использовать функцию stringdist stringdist(df2$Name,df1$Name,method ='jw'), но она выдает ошибку, говорящую: «Большая длина объекта не кратна короткой длине объекта».

Мне нужно получить df1$Name, соответствующий df2$Name, игнорирующий знаки препинания или изменения типа компании, такие как corp, в c, ltd, ll c et c. Может кто-нибудь, пожалуйста, помогите мне найти способ сделать это?

1 Ответ

0 голосов
/ 18 февраля 2020

Создание нового столбца abbr для будущего сопоставления / слияния в df2, похоже, подходит вам, поэтому я бы сделал следующее:

  1. создайте новый столбец df2 $ abbr в df2 с компанией имена без знаков препинания
  2. с использованием df1 $ Name в качестве поиска для извлечения сокращений названий компаний
# adding a multiple-word company name
Name = c("7PR SRO.","7PR","3XL INC","ACME INC","ACME INCORP", "ABC Industrial complex LTD")
abbr = c("7PR","7PR","3XL","ACME","ACME", "ABC Industrial complex")

# make data frames
df1<- data.frame(Name, abbr, stringsAsFactors=FALSE)
df2<- data.frame(Name = c("7PR S.R.O.", "3XL LLC", "A.C.M_E Ltd"), stringsAsFactors=FALSE) # added some punctation to ACME

# package needed
library(stringr)

# create new column abbr containing the abbreviations
df2 <- df2 %>%
  mutate(abbr = gsub("[[:punct:]]", "", Name), # get rid of punctuation
         abbr = str_extract(abbr, paste(df1$abbr, collapse = "|"))) # use df1$abbr as lookup
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...