У меня есть два фрейма данных, которые содержат информацию о компаниях, и мне нужно сопоставить компанию от первого фрейма данных до компании со второго df. К сожалению, невозможно создать 100% автоматический алгоритм, поскольку в обеих таблицах нет единого идентификатора, а названия компаний не всегда совпадают. Поэтому я подумал о создании алгоритма, который бы предлагал сходство между названием компании (через пакет stringdist), но позволил человеку сделать окончательную проверку, чтобы сравнить все переменные и выбрать наилучшее совпадение.
У меня есть маленький воспроизводимый пример ниже. Решение из этого примера сработало бы для меня, если бы наборы данных были такими же простыми, как представленные здесь. К сожалению, набор данных слишком велик, и печать таблицы в консоли невозможна. Поэтому я хотел бы знать, как я могу попросить R открыть диалоговое окно, которое показывает таблицу, которую я сейчас печатаю на консоли, и в это диалоговое окно я хотел бы вставить лучшее совпадение.
Большое спасибо за любую поддержку.
# create df 1 to be matched
df_to_be_matched <- data.frame(name = c("name_130","name_90"), year=c(2011,2012), val = c(rnorm(2)))
# create df with options to search for the best match
df_options <- data.frame( ID= sample(c("A","B","C"),10,replace = T),
year = sample(c(2010, 2011, 2012), 10,replace = T),
name = paste0("name_",sample(1:200,10)),
value = rnorm(10,10,2))
# loop to choose best match
for(i in 1:nrow(df_to_be_matched)){
print("-------------------------------------------")
mtch <- df_to_be_matched[i,]
aux_options <- df_options %>%
mutate(compar = stringdist::stringdist(mtch$name,df_options$name)) %>% # create comparison index
arrange(compar) %>% # sort it
mutate(idx = seq(1,nrow(df_options)))
print(aux_options) # print table with options on the console
print("")
cat (paste0("Type the index from the best match to: Company = ",mtch$name,"; year = ",mtch$year,
"; value = ",mtch$val,". Than press [enter]"))
line <- as.numeric( readline()) # enter index for the best match
if(line %in% aux_options$idx){
print("") # jump lines
print("Match is: ")
print("")
print(aux_options[line,])
print("")
print("")
}else{
print("No match")
}
}