我有两个数据框 -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)
另一种方法可以做到这一点:
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)
| 归档时间: |
|
| 查看次数: |
345 次 |
| 最近记录: |