在 R 中的数据框的两列中查找缺失的匹配项
Finding a missing match in two columns of a data frame in R
我得到了:
a <- c('A','A','B','B','C','C','D','D')
b <- c(1,2,1,2,2,3,1,2)
frame1 <- data.frame(a,b)
现在我想知道 'a' 列中的哪个字符串没有与 'b' 列中的“1”匹配的数字。
在这种情况下,它将是 'C'.
这是一个基本的 R 选项 -
with(frame1, setdiff(unique(a), a[b == 1]))
#[1] "C"
提取 a
值,其中 b = 1
并使用 setdiff
到 return 不在其中的 a
值。
基础 R
frame1[ave(frame1$b, frame1$a, FUN = function(z) !1 %in% z) > 0,]
# a b
# 5 C 2
# 6 C 3
dplyr
library(dplyr)
frame1 %>%
group_by(a) %>%
filter(!1 %in% b)
# # A tibble: 2 x 2
# # Groups: a [1]
# a b
# <chr> <dbl>
# 1 C 2
# 2 C 3
我们可以使用data.table
library(data.table)
setDT(frame1)[, .SD[!any(b %in% 1)], a]
a b
1: C 2
2: C 3
或在base R
unique(subset(frame1, !a %in% a[b == 1])$a)
[1] "C"
我得到了:
a <- c('A','A','B','B','C','C','D','D')
b <- c(1,2,1,2,2,3,1,2)
frame1 <- data.frame(a,b)
现在我想知道 'a' 列中的哪个字符串没有与 'b' 列中的“1”匹配的数字。 在这种情况下,它将是 'C'.
这是一个基本的 R 选项 -
with(frame1, setdiff(unique(a), a[b == 1]))
#[1] "C"
提取 a
值,其中 b = 1
并使用 setdiff
到 return 不在其中的 a
值。
基础 R
frame1[ave(frame1$b, frame1$a, FUN = function(z) !1 %in% z) > 0,]
# a b
# 5 C 2
# 6 C 3
dplyr
library(dplyr)
frame1 %>%
group_by(a) %>%
filter(!1 %in% b)
# # A tibble: 2 x 2
# # Groups: a [1]
# a b
# <chr> <dbl>
# 1 C 2
# 2 C 3
我们可以使用data.table
library(data.table)
setDT(frame1)[, .SD[!any(b %in% 1)], a]
a b
1: C 2
2: C 3
或在base R
unique(subset(frame1, !a %in% a[b == 1])$a)
[1] "C"