я хочу заменить данные df1 на df2, где df2 - это данные, подобные df1 пример
df1 <- data.frame(
name = c(
"A. MAHJUM-61365",
"A. MAHJUM-61365. MAHJUM-61365",
"A. RIZAL. AD-11002795",
"A. RIZAL. AD-11002795. RIZAL. AD-11002795",
"ABD. KADIR-60447",
"ABD. KADIR-60447ABD. KADIR-60447",
"ABD. KAHAR-62551",
"ABD. RASYID DS-11002082",
"ABDREAS APUNG @SANY",
"ABDUL AZIS @HYUNDAY",
"ABDUL AZIZ @HYUNDAI",
"ABDUL AZIZ@HYUNDAI"
))
и df2 есть
df2 <- data.frame(
name = c(
"A. MAHJUM-61365",
"A. RIZAL. AD-11002795",
"ABD. KADIR-60447",
"ABD. KAHAR-62551",
"ABD. RASYID DS-11002082",
"ABDREAS APUNG @SANY",
"ABDUL AZIS @HYUNDAY"
))
если df1 выглядит как df2, df1 будет заменен на df2
Поскольку это совпадение подстроки, мы можем использовать fuzzyjoin
library(dplyr)
library(fuzzyjoin)
regex_left_join(df1, df2, by = 'name') %>%
transmute(name = coalesce(name.y, name.x))
или используйте метод, основанный на расстоянии
stringdist_left_join(df1, df2, by = 'name') %>%
transmute(name = coalesce(name.y, name.x))
@FadhilDzikri это происходит, когда он соответствует более чем одному месту, потому что это не точные совпадения - первое совпадение соответствует подстроке, а второе - совпадению расстояния. Предположим, что весь ваш набор данных имеет несколько мест, где совпадают подстроки, он выполняет декартово соединение
так что у вас есть другие идеи для решения по этому вопросу?
@FadhilDzikri с совпадениями подстроки, вы можете изменить только метод = в stringdist_left_join
Вы можете использовать adist
, чтобы найти лучшее совпадение и заменить их.
i <- max.col(-adist(df1$name, df2$name, partial=TRUE))
df1$name <- df2$name[i]
df1
# name
#1 A. MAHJUM-61365
#2 A. MAHJUM-61365
#3 A. RIZAL. AD-11002795
#4 A. RIZAL. AD-11002795
#5 ABD. KADIR-60447
#6 ABD. KADIR-60447
#7 ABD. KAHAR-62551
#8 ABD. RASYID DS-11002082
#9 ABDREAS APUNG @SANY
#10 ABDUL AZIS @HYUNDAY
#11 ABDUL AZIS @HYUNDAY
#12 ABDUL AZIS @HYUNDAY
но это не работает в # 10 11 12 ?
Что должно стоять в #10 11 12? ABDUL AZIS @HYUNDAY
— ближайшее совпадение.
извините, но я пробовал с моим набором данных, который имеет 181979 наблюдений, у меня есть 1013 наблюдений в df2, но когда я запускаю этот код, он делает мой набор данных равным 185136, это больше наблюдений, чем мой набор данных, почему это может произойти ?