Распечатать таблицу в диалоговом окне и прочитать ввод - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть два фрейма данных, которые содержат информацию о компаниях, и мне нужно сопоставить компанию от первого фрейма данных до компании со второго 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")
  }
}


...