如何打印存在于一个数据框中而另一个数据框中缺失的观察结果?

How to print observations existing in one dataframe and missing from the other r?

我有一个包含 3719(实际数据)行的数据帧和另一个包含 3721(来自编码)行的数据帧。我得到了 2 个额外的观察结果。

我已经尝试使用 setdiff,但它给出的行数为零

dplyr::setdiff(d1,d2)

o/p: [1] col1 col2 col3 col4       
     [5] col5 col6                
<0 rows> (or 0-length row.names)

我也试过反之亦然,即

dplyr::setdiff(d2,d1)

o/p: [1] col1 col2 col3 col4       
     [5] col5 col6                
<0 rows> (or 0-length row.names)

如何识别 R 中的那 2 个额外观察值?

选项 1 您可以使用 %in% 运算符

#Make Fake Data
a <- mtcars
b <- mtcars[ 3:nrow(mtcars) , ] 

a$id <- rownames( a )
b$id <- rownames( b )

#In A not B
a[ !(a$id %in% b$id) , ]
#In B not A
b[ !(b$id %in% a$id) , ]

选项 2 - 使用与 all=T 合并

a$flaga <- 1
b$flagb <- 1

d <- merge( a[ ,c("id","flaga")] , b[ ,c("id","flagb")], by= "id" , all=T)

d[ is.na(d$flaga) | is.na(d$flagb) , "id" ]

反加入将是 "tidy" 选项:

library(tidyverse)

d1 <- tribble(~a, ~b,
              "a", 3,
              "f", 9,
              "g", 10)

d2 <- tribble(~a, ~b,
              "a", 333,
              "b", 999,
              "f", 444,
              "g", 111)

d2 %>%
  anti_join(d1, by = "a")

# A tibble: 1 x 2
# a         b
# <chr> <dbl>
#   1 b       999