STRING_ELT () может применяться только к «символьному вектору», а не к «целому числу» - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть два кадра данных a и b, и я хочу сравнить некоторые столбцы между собой.Все работало просто отлично, пока не появилась ошибка:

Error in mutate_impl(.data, dots) : 
Evaluation error: STRING_ELT() can only be applied to a 'character vector', not a 'integer'.

мой код:

library(RecordLinkage)
library(dplyr)

lookup <- expand.grid(target = a$NAME, source = b$WHOLE_NAME, stringsAsFactors = FALSE)

y <-lookup %>% group_by(target) %>%
   mutate(match_score = jarowinkler(target, source))  %>%
   summarise(match = match_score[which.max(match_score)], matched_to = 
   source[which.max(match_score)])  %>%
   inner_join(b, by = c("matched_to" = "WHOLE_NAME"))

1 Ответ

0 голосов
/ 20 декабря 2018

Без данных примера трудно знать наверняка, но я могу воспроизвести ошибку, когда столбец с именами в b и / или a является фактором.

Одним из решений является использование функции stringdist из пакета stringdist:

a <- data.frame(names = c("foo", "bar", "aargh"), stringsAsFactors = FALSE)
b <- data.frame(wholename= c("foob", "baar", "flierp"), stringsAsFactors = FALSE)

lookup <- expand.grid(target = a$names, source = b$wholename, stringsAsFactors = FALSE)

y <-lookup %>% group_by(target) %>%
   mutate(match_score = stringdist::stringdist(target, source, method = "jw"))  %>%
   summarise(match = match_score[which.max(match_score)], matched_to = 
   source[which.max(match_score)])  %>%
   inner_join(b, by = c("matched_to" = "wholename"))

Другим решением является использование пакета reclin (автором которого я являюсь):

library(reclin)

names(b) <- "names"

pair_blocking(a, b) %>% 
  compare_pairs(by = c("names"), default_comparator = jaro_winkler()) %>% 
  select_n_to_m(weight = "names") %>% 
  link()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...