Объединить два кадра данных в R на основе строки (имя) - PullRequest
0 голосов
/ 29 августа 2018

У меня есть два фрейма данных, которые мне нужно объединить на основе столбца кандидата и группы интересов. Теперь проблема заключается в том, что в обоих фреймах данных есть расхождения между написанием имен в обоих фреймах данных.

Например, в одном фрейме данных д-р Ашутош Сингх, в другом - д-р Ашутош Сингх. В одном кадре данных зовут доктор Викаш Сингх, в другом - Викаш Сингх.

Я прилагаю скриншот обоих фреймов данных. первый кадр данных

Кадр данных Secoond

Мне нужно сопоставить столбцы первого фрейма данных CAND_NAME и AC_NAME со вторым столбцом-кандидатом и группой интересов соответственно и объединить их в один.

Я тоже делюсь файлом Excel и кодом R Я должен объединить три листа в один.
Ссылка на файл Excel

R код

setwd("/home/lenovo/Documents/r_prog/")
library(readxl)

candidate2017=read_excel("LA 2017.xlsx", sheet = 1)
electors2017=read_excel("LA 2017.xlsx", sheet = 2)

ManipurCandidates2017ADR=read_excel("LA 2017.xlsx", sheet = 3)

ManipurCandidate2017=candidate2017[grepl("Manipur", candidate2017$ST_NAME),]
ManipurElectors2017=electors2017[grepl("Manipur", electors2017$ST_NAME),]


ManipurElectors2017 = data.frame(lapply(ManipurElectors2017, function(v) {
  if (is.character(v)) return(toupper(v))
  else return(v)
}))

ManipurCandidates2017ADR = data.frame(lapply(ManipurCandidates2017ADR, function(v) {
  if (is.character(v)) return(toupper(v))
  else return(v)
}))

ManipurCandidate2017 = data.frame(lapply(ManipurCandidate2017, function(v) {
  if (is.character(v)) return(toupper(v))
  else return(v)
}))


View(ManipurCandidate2017)
View(ManipurElectors2017)
View(ManipurCandidates2017ADR)

mergedData = merge(ManipurCandidate2017,ManipurCandidates2017ADR , 
              by.x=c('CAND_NAME'), by.y=c('Candidate'), all = TRUE)

Я новичок в R, пожалуйста, помогите. Заранее спасибо.

1 Ответ

0 голосов
/ 29 августа 2018

Возможное решение включает использование Приблизительного совпадения строк (Fuzzy Matching). Проверьте функцию agrep(). Конечно, вы можете встраивать agrep() в merge() вызов. Я не могу написать код, поскольку вы не предоставили воспроизводимый пример.

Звонок будет выглядеть примерно так:

dat3 <- merge(x=dat1,y = dat2[agrep(dat1$ID1[1],dat2$ID2),],all=TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...