У меня есть 2 разных набора данных. Один из них (DF1) - это подмножество другого (DF2). Есть группа под названием Сампн. Я хочу удалить все элементы группы в более крупных наборах данных, если есть хотя бы одна строка из этой группы в меньших наборе данных.

Df2

     SAMPN     PERNO     
       1         1
       1         2
       1         3
       2         1
       2         3
       3         3
       3         4
       3         5
       4         1
       4         3    

Df1

     SAMPN     PERNO     
       1         1
       2         1
       2         3

Выход

     SAMPN     PERNO     
       3         3
       3         4
       3         5
       4         1
       4         3 

Данные:

Df1:

structure(list(SAMPN = c("   11", "   18", "   27", "   33", 
"   33", "   39"), PERNO = structure(c(1L, 1L, 1L, 1L, 2L, 4L
), .Label = c("1", "2", "3", "4", "5", "6", "7", "8"), class = "factor")), row.names = c(NA, 
-6L), class = c("tbl_df", "tbl", "data.frame"))

Df2:

structure(list(SAMPN = c(10, 10, 10, 11, 11, 11, 11, 12, 12, 
12, 12), PERNO = c(2, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2)), row.names = 90:100, class = "data.frame")
1
user12036223 25 Сен 2019 в 01:32

1 ответ

Лучший ответ

Вы можете отфильтровать все строки, где SAMPN не в df2$SAMPN, используя этот код:

library(tidyverse)

df1 <- df1 %>% mutate(SAMPN=as.numeric(SAMPN)) %>% 
               filter(!(SAMPN %in% df2$SAMPN))
0
fmarm 24 Сен 2019 в 23:20