Как сопоставить данные, когда идентификаторы имеют некоторые знаки, или они имеют нижний или верхний регистр - PullRequest
1 голос
/ 11 июня 2019

Я хочу сопоставить два разных файла, но идентификаторы имеют некоторые знаки или строчные / прописные.Вот мои данные:

df1<-read.table(text="id v1 v2 v3 
             xxx,	12	11	13
MMM	w	n	m
                GgG	Q	n	m
                bccde,	w	P	m
                QMC	NA	T	p
                
                ",h=T)

Второй файл:

df2<-read.table(text="id M4 N4 
             mmm	10	23
BcCde	11	11
                GGG,	12	5
                XXX	21	6
                
                ",h=T)

Я хочу получить:

df3<-read.table(text="id v1 v2 v3 M4 N4
            xxx,	12	11	13	21	6
MMM	w	n	m	10	23
                GgG	Q	n	m	12	5
                bccde,	w	P	m	11	11
                QMC	NA	T	p	NA	NA
                
                
                ",h=T)

Я использую слияние, но не работает

merge(x = df1, y = df2, by = "id", all = TRUE)

Можно ли отсортировать мои данные?Спасибо тебе

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

Мы можем использовать regex_left_join от fuzzyjoin

library(fuzzyjoin)
library(dplyr)
library(stringr)
regex_left_join(df1, mutate(df2, id = str_remove(id, ",")),
      by = "id", ignore_case = TRUE) %>%
      select(id = id.x, v1, v2, v3, M4, N4)
#       id   v1 v2 v3 M4 N4
#1   xxx,   12 11 13 21  6
#2    MMM    w  n  m 10 23
#3    GgG    Q  n  m 12  5
#4 bccde,    w  P  m 11 11
#5    QMC <NA>  T  p NA NA

Или с select everything()

regex_left_join(df1, mutate(df2, id = str_remove(id, ",")),
       by = "id", ignore_case = TRUE) %>% 
     select(everything(), id = id.x, -id.y) 
#      id   v1 v2 v3 M4 N4
#1   xxx,   12 11 13 21  6
#2    MMM    w  n  m 10 23
#3    GgG    Q  n  m 12  5
#4 bccde,    w  P  m 11 11
#5    QMC <NA>  T  p NA NA
0 голосов
/ 11 июня 2019

Вы можете преобразовать все ids в нижний регистр, а затем объединить.Используя dplyr,

library(tidyverse)

df1 %>% 
 mutate(id = tolower(id)) %>% 
 left_join(df2 %>% mutate(id = tolower(id)), by = 'id')

, что дает,

      id   v1 v2 v3 M4 N4
1   xxx,   12 11 13 NA NA
2    mmm    w  n  m 10 23
3    ggg    Q  n  m NA NA
4 bccde,    w  P  m NA NA
5    qmc <NA>  T  p NA NA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...