Выберите отсутствующие строки в разных кадрах данных

У меня есть два фрейма данных: list1 и list2

>head(list1)
       RS_ID CHROM       POS REF_ALLELE ALT_ALLELE AF_REF_allsamples
1 rs77599058     1 195680131          C          T            0.9996
2 rs73056353     1 195680971          A          G            0.9999
3 rs12130880     1 195681419          A          T            0.5475
4 rs76457267     1 195681460          A          C            0.9993
5 rs10921893     1 195681616          T          C            0.5060
6 rs75239769     1 195682022          G          A            0.9999
  AF_ALT_allsamples AF_REF_onlycontrol AF_ALT_onlycontrol pvalues
1            0.0004             0.9996             0.0004  0.7830
2            0.0001             0.9998             0.0002  0.3740
3            0.4525             0.5442             0.4558  0.0597
4            0.0007             0.9992             0.0008  0.3590
5            0.4940             0.5099             0.4901  0.0302
6            0.0001             1.0000             0.0000  0.5500
>head(list2)
       RS_ID CHROM       POS REF_ALLELE ALT_ALLELE AF_REF_allsamples
1 rs77599058     1 195680131          C          T            0.9996
2 rs73056353     1 195680971          A          G            0.9999
3 rs12130880     1 195681419          A          T            0.5475
4 rs76457267     1 195681460          A          C            0.9993
5 rs10921893     1 195681616          T          C            0.5060
6 rs75239769     1 195682022          G          A            0.9999
  AF_ALT_allsamples AF_REF_onlycontrol AF_ALT_onlycontrol pvalues
1            0.0004             0.9996             0.0004  0.7830
2            0.0001             0.9998             0.0002  0.3740
3            0.4525             0.5442             0.4558  0.0597
4            0.0007             0.9992             0.0008  0.3590
5            0.4940             0.5099             0.4901  0.0302
6            0.0001             1.0000             0.0000  0.5500
> dim(list1)
[1] 235111     10
> dim(list2)
[1] 234520     10

как вы можете видеть с dim(), они различаются по количеству строк на 591. Теперь я хочу получить новый кадр данных со всеми строками из списка1, которых нет в списке2 (эти 591)

Я старался

> match_diff=list1[!(list1 %in% list2)]
> dim(match_diff)
[1] 235111     10

но, как вы можете видеть, это говорит мне, что все строки из списка1 отличаются от списка2.

Я проверил с помощью str(), есть ли основная причина, но оба идентичны (происходят из одних и тех же необработанных данных)

Я не могу проверить по одному столбцу, но должен сравнивать каждую строку в целом.


person JackJack    schedule 30.10.2020    source источник
comment
можно попробовать dplyr::anti_join(list1, list2)   -  person starja    schedule 30.10.2020


Ответы (1)


Это операция базы данных join. Если вы ищете объединения, вы найдете больше информации о различных типах. Как сказал @starja, вам нужен anti_join от dplyr:

Установите dplyr, если у вас его еще нет с install.packages('dplyr')

R> list1 <- data.frame(a=0:5, b=10:15)
R> list2 <- data.frame(a=(0:5)+3, b=(10:15)+3)
R> list1
  a  b
1 0 10
2 1 11
3 2 12
4 3 13
5 4 14
6 5 15
R> list2
  a  b
1 3 13
2 4 14
3 5 15
4 6 16
5 7 17
6 8 18
R> list3 <- dplyr::anti_join(list1, list2)
Joining, by = c("a", "b")
R> list3
  a  b
1 0 10
2 1 11
3 2 12
R> 
person keithpjolley    schedule 31.10.2020