如何打印存在于一个数据框中而另一个数据框中缺失的观察结果?
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
我有一个包含 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