考虑以下小标题:
library(tidyverse)
tbl_base_ids = tibble(base_id = c("ABC", "ABCDEF", "ABCDEFGHI"), base_id_length = c(3, 6, 9), record_id_length = c(10, 12, 15))
tbl_records = tibble(record_id = c("ABC1234567", "ABCDEF123456", "ABCDEFGHI123456"))
我想连接匹配的行以生成第三个小标题:
tbl_records_with_base
record_id
base_id
base_id_length
record_id_length
正如您所看到的,这不是连接前两个变量中的一个或多个变量的问题。这需要匹配变量导数。在 SQL 中,我会这样做:
SELECT A.record_id,
B.base_id,
B.base_id_length,
B.record_id_length
FROM tbl_records A
JOIN tbl_base_ids B
ON LENGTH(a.record_id) = B.record_id_length
AND LEFT(a.record_id, B.base_id_length) = B.base_id
我尝试过 dplyr 连接的变体并使用 match 函数,但无济于事。有人可以帮忙吗?谢谢。
最佳答案
您应该想出一些逻辑来将 base_id
与 record_id
分开。因为仅加入 record_id_length
是不够的。对于此示例,如果我们从 record_id
中删除所有数字,我们就可以获得 base_id
。根据您的实际数据集,您需要根据需要更改此设置。
完成后,我们可以通过 base_id
和 record_id_length
将 tbl_records
与 tbl_base_ids
连接起来。
library(dplyr)
tbl_records %>%
mutate(base_id = sub('\\d+', '', record_id),
record_id_length = nchar(record_id)) %>%
inner_join(tbl_base_ids, by = c("base_id", "record_id_length")) -> result
result
# record_id base_id record_id_length base_id_length
# <chr> <chr> <dbl> <dbl>
#1 ABC1234567 ABC 10 3
#2 ABCDEF123456 ABCDEF 12 6
#3 ABCDEFGHI123456 ABCDEFGHI 15 9
关于R:使用派生列值连接 Tibbles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65694040/