Как находить элементы A, что не были в B?

У меня есть один df1

ID Padre Madre
1 M0FR645331030147M0   FR645315380096 H0ES1500301571052010
2 M0FR645331050104M0   FR64529351013  000000000000000002010
3 M0FR645335610058M0   FR645075680098 00000000000000002011
4 M0FR64533650006000   00000000000000 00000000000000002010
5 M0FR645336540068M0   FR645073390099000 00000000000002014
6 M0FR64533932021300   0000000000000000000000000000002006

и 2

  ID
1 FR640446050750
2 FR645222990075
3 FR645315760076
4 FR645072390147
5 FR645178660108
6 FR645036090080

Я хочу произвести список помимо элементов идентификации dataframe 1, что не в dataframe 2. У меня есть добавочная проблема и - тот, которого идентификация df1 всегда начинает с двумя добавочными символами, которые не в df2, с чем я хочу, чтобы он только считал сравнение равных элементов второго характера в дальнейшем.

Я пробовал:

dataframe1[!(Dataframe1$ID %in% dataframe2$ID)]

но это неполная команда...

Как я должен делать это?

2
задан 11.05.2018, 07:19
2 ответа

То, что ты можешь делать, состоит в том, чтобы обрезать ID используя substring(), чтобы снимать первые два символа, но дает ее мне impresiГіn, что tambiГ©n habrГ, - который лишать Гєltimos.

# Buscamos los dataframe1.ID a los que recortamos desde el 3er caracter hasta el final
dataframe1[!substring(dataframe1$ID, 3) %in%  dataframe2$ID,]

# O bien buscamos los df1.ID recortando los 2 caracteres iniciales y los 2 finales
dataframe1[!substring(dataframe1$ID, 3, 3 + nchar(dataframe2$ID[1])-1) %in%  dataframe2$ID,]

В первом случае substring(dataframe1$ID, 3), обрезает с характера 3 и когда один не показывает parГЎmetro конец serГЎ оставшаяся часть цепи. Второй случай, если он будет состоять в том, что действительно он такой, как я воображаю, мы используем parГЎmetro stop, чтобы показывать даже dГіnde обрежем: substring(dataframe1$ID, 3, 3 + nchar(dataframe2$ID[1])-1) обрезает с характера 3 Гєnicamente длина, которая есть у dataframe2$ID.

1
ответ дан 20.11.2019, 09:17

В следующем примере я добавляю добавочную линию к dataframe2 и я извлек начальные и конечные символы, asГ - функционируй ты cГіdigo.

library(tibble)

dataframe1<-tribble(
  ~ID, ~Padre, ~Madre,
  "M0FR645331030147M0",   "FR645315380096", "H0ES1500301571052010", # Agrege este id al df2
  "M0FR645331050104M0",   "FR64529351013",  "000000000000000002010",
  "M0FR645335610058M0",   "FR645075680098", "00000000000000002011",
  "M0FR64533650006000",   "00000000000000", "00000000000000002010",
  "M0FR645336540068M0",   "FR645073390099000", "00000000000002014",
  "M0FR64533932021300",   "00000000000000000", "00000000000002006" 
)

dataframe2<-tribble(
  ~ID,
   "FR640446050750",
   "FR645222990075",
   "FR645315760076",
   "FR645072390147",
   "FR645178660108",
   "FR645036090080",
   "FR645331030147" #Agregue esta fila 
)

library(stringr)
# Extraer caracteres adicionales, guardar en nueva ID
dataframe1$ID2<-str_sub(dataframe1$ID,3,16)

#Excluir coincidencias 
dataframe1[!dataframe1$ID2%in%dataframe2$ID,]  

# A tibble: 5 x 4
                  ID             Padre                 Madre            ID2
               <chr>             <chr>                 <chr>          <chr>
1 M0FR645331050104M0     FR64529351013 000000000000000002010 FR645331050104
2 M0FR645335610058M0    FR645075680098  00000000000000002011 FR645335610058
3 M0FR64533650006000    00000000000000  00000000000000002010 FR645336500060
4 M0FR645336540068M0 FR645073390099000     00000000000002014 FR645336540068
5 M0FR64533932021300 00000000000000000     00000000000002006 FR645339320213
1
ответ дан 20.11.2019, 09:17
  • 1
    Большое спасибо Роландо! Сейчас все функционирует, как он нуждался :) – Caro 14.05.2018, 02:33