【发布时间】:2021-08-12 08:53:47
【问题描述】:
我有一个如下所示的数据框:
df <- data.frame(a = c('x', 'y', 'z', 't', 'm'), b = c('x', 'x', 'y', NA, 'm'))
> df
a b
1 x x
2 y x
3 z y
4 t <NA>
5 m m
现在,对于“a”和“b”列中的每个值,我想查看它是否存在于“a”和“b”的任何其他行中并返回匹配项。因此,对于第 1 行,我想查看 'x' 或 'y' 是否存在于第 2:5 行的 a 或 b 列中,然后返回 'TRUE'。
我想要的结果是:
> df$match = c(TRUE, TRUE, TRUE, FALSE, FALSE)
> df
a b match
1 x x TRUE
2 y x TRUE
3 z y TRUE
4 t <NA> FALSE
5 m m FALSE
似乎无法找到一种方法来做到这一点。我一直在尝试使用 dplyr:
df %>%
mutate(match = a %in% b | a %in% a | b %in% b | b %in% a)
但这只是将所有内容都返回为 TRUE。此外,如果 b 为 NA,那么它也将匹配任何其他不希望的 NA 值。
使用按行操作也不起作用,这只是检查行内的值。
【问题讨论】:
-
如果一个存在而另一个不存在,它将返回 TRUE?
-
如果您的意思是所需结果中的第 3 行,它应该返回 TRUE,因为 'b' 列中的 'y' 存在于 'a' 列的第 2 行中。否则我可能无法正确理解您的问题