#r
#r
Вопрос:
У меня есть следующие данные, которые являются частью моей выборки, учитывая, что мой набор данных немного велик:
df1<-read.table (text=" id
Ali,hok
Bab,mko
Katie,Mon
NA
NA
NA
NA
john,Nulla
NA
NA
", header=TRUE)
Второй набор данных выглядит следующим образом:
df2<-read.table (text=" id Class
Katie,Mon AS1
Ali,hok MNO1
john,Nulla KAL1
Katie,Mon Nook
Bab,mko BAR11
", header=TRUE)
Я хочу получить :
id Class
Ali,hok MNO1
Bab,mko BAR11
Katie,Mon AS1
NA NA
NA NA
NA NA
NA NA
john,Nulla KAL1
NA NA
NA NA
Я использовал fuzzyjoin
, но я не получил предполагаемый результат
library(fuzzyjoin)
outt<-left_join(df2,df1,by=c("id"="id"))
Комментарии:
1. Вы пробовали полное объединение?
2. Ваш
left_join
не изfuzzyjoin
. Вам может понадобитьсяregex_left_join
илиstringdist_left_join
3. Ошибка в dists[include] <- stringdist::stringdist(v1[включить], v2[включить], : NAS не разрешены в назначениях с подпиской
4. Строка с
kazi,jo
не имеет аналогичной строки в ‘df2’5. Для Katie, mon record у вас разные записи, почему вы сопоставили AS1 с NOOK? Какова была логика там?
Ответ №1:
Попробуйте простой merge
из базового R
df3 <- merge(df1, df2, all.x=T)
df3
#> id Class
#> 1 Ali,hok MNO1
#> 2 Bab,mko BAR11
#> 3 john,Nulla KAL1
#> 4 Katie,Mon AS1
#> 5 Katie,Mon Nook
#> 6 kazi,jo <NA>
#> 7 <NA> <NA>
#> 8 <NA> <NA>
#> 9 <NA> <NA>
#> 10 <NA> <NA>
#> 11 <NA> <NA>
Комментарии:
1. Это не отражает результат интереса