Как распечатать наблюдения, существующие в одном кадре данных и отсутствующие в другом? - PullRequest
0 голосов
/ 09 марта 2020

У меня есть один фрейм данных с 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)

Как определить эти 2 дополнительных наблюдения в R?

Ответы [ 2 ]

2 голосов
/ 09 марта 2020

Анти-объединение будет "аккуратным" вариантом:

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
0 голосов
/ 09 марта 2020

Вариант 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 - использовать объединение со всеми = 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" ]
...