首页 > 解决方案 > 通过无序列表加入 tibbles

问题描述

假设我有两个 tibbles:ab.

a <- tibble("unordered_characters" = list( c("A","B"), c("X","Y") ) ,
            "v" = c("G", "F"))
b <- tibble("unordered_characters" = list( c("B","A"), c("Y","X")),
            "x" = c("M", "d"))

我想加入b使用a他们的公共变量,这是一个列表。但我希望列表是无序的,因此c("A","B")应该与c("B","A"). 换句话说,setequal(c("A","B"),c("B","A"))返回TRUE。这将创建下表:

unordered_characters v x
------------------------
c("A","B")            G M 
c("X","Y")           F d

a %>% left_join(b)结果如下:

unordered_characters v x
------------------------
c("A","B")            G NA 
c("X","Y")           F NA

我怎样才能解决这个问题?

标签: rdplyr

解决方案


我们可以在进行连接之前使用map循环listsort

library(dplyr)
library(purrr)
a %>% 
  mutate(unordered_characters = map(unordered_characters, sort)) %>% 
  left_join(b %>% 
       mutate(unordered_characters = map(unordered_characters, sort)))
# A tibble: 2 x 3
#  unordered_characters v     x    
#  <list>               <chr> <chr>
#1 <chr [2]>            G     M    
#2 <chr [2]>            F     d    

推荐阅读