r - 如何合并两个数据框并提取列的唯一组合?

我有两个数据框。第一个是引用 df,看起来像这样:

变量1 变量2 一个 e b z c f d h 表>

第二个是我的宇宙:

sym1 sym2 e 一个 b f b z f c n s n k k 我 表>

我想合并它们,并只采用宇宙中所有可能对的引用数据框中存在的唯一组合。

理想情况下,我希望报告的数据框看起来像这样:

变量1 变量2 一个 e b z c f 不适用 不适用 表>
library(tidyverse)
var1 = c("a","b","c","d")
var2 = c("e","z","f","h")
ref = tibble(var1,var2);ref
sym1 = c("e","b","b","f","n","n","k")
sym2 = c("a","f","z","c","s","k","l")
univ = tibble(sym1,sym2);univ

我如何使用 dplyr 在 R 中执行此操作?

最佳答案

在基础 R 中:

s <- apply(univ, 1, \(x) paste(sort(x), collapse = " "))
r <- paste(ref$var1, ref$var2)
univ[match(r, s), ]
  sym1  sym2 
1 e     a    
2 b     z    
3 f     c    
4 NA    NA   

在一个 tidyverse 友好的管道中:

library(stringr)
library(dplyr)
univ %>% 
  rowwise() %>% 
  mutate(s = str_c(sort(c_across(everything())), collapse = "")) %>% 
  pull(s) %>% 
  match(str_c(ref$var1, ref$var2), .) %>% 
  univ[., ]

https://stackoverflow.com/questions/74233237/

相关文章:

sql - 删除 R 中的模糊重复项

r - 更快地填充矩阵

haskell - 如何声明一个参数可以是 (Int, Int) 或 Maybe (Int, Int

php - 按列中的子数组对数据行进行分组,并创建具有可变深度的子集

powershell - 执行功能默认操作,除非给出管道输入?

c - 在分配内存之前对灵活成员数组的第一个元素使用 sizeof 是未定义的行为?

node.js - react native : A failure occurred while

python - 列表到列表字典(Python 优化)

c++ - 如何使用索引初始化数组元素

r - 使用 group_by() 根据条件折叠 R 中的数据集