使用多个 OR 语句连接 R

isk*_*lue 5 r dplyr

我有两个数据框 -test并且idx - 我的目标是使用merge()或类似的函数来进行条件连接。

例如,testid 具有多个可能的键(某些中还有 NA 值)。您不会找到两个单独的相同的键ids,键将始终是唯一的。

> test
   id keyA keyB keyC
1 foo   NA    2   10
2 bar    1   NA    6
3 baz    7   NA    4
4  li    8    3   NA
5 qux    9   NA   NA
Run Code Online (Sandbox Code Playgroud)

我的目标是加入idx键中存在任何匹配项的位置,例如:

> idx
  key value
1   2    NA
2  10    NA
3   7    NA
4   4    NA
5   9    NA
Run Code Online (Sandbox Code Playgroud)

连接应该输出:

> idx
  key value
1   2   foo
2  10   foo
3   7   bar
4   4   bar
5   9   quz
Run Code Online (Sandbox Code Playgroud)

我了解如何merge在一个或多个列上使用,但不确定在OR涉及语句时如何使用它(在本例中,匹配将在 keyA OR keyB OR keyC 上)

如何在 R 中执行此连接?

数据:

dput(test)
structure(list(id = c("foo", "bar", "baz", "li", "qux"), keyA = c(NA, 
1, 7, 8, 9), keyB = c(2, NA, NA, 3, NA), keyC = c(10, 6, 4, NA, 
NA)), row.names = c(NA, -5L), class = "data.frame")

dput(idx)
structure(list(key = c(2, 10, 7, 4, 9), value = c(NA, NA, NA, 
NA, NA)), row.names = c(NA, -5L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

utu*_*bun 1

另一种方法可以做到这一点:

library(tidyverse)

nest(test, -id) %>%
  rowwise() %>%
  mutate(key = list(idx$key[idx$key %in% data])) %>%
  unnest(key, .drop = T) %>%
  select(key, value = 'id')

# # A tibble: 5 x 2
# key value
#   <int> <chr>
# 1     2 foo  
# 2    10 foo  
# 3     7 baz  
# 4     4 baz  
# 5     9 qux 
Run Code Online (Sandbox Code Playgroud)