r - 通过无序列表加入 tibbles
问题描述
假设我有两个 tibbles:a
和b
.
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
我怎样才能解决这个问题?
解决方案
我们可以在进行连接之前使用map
循环list
和sort
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
推荐阅读
- vue.js - 已分配计算属性“showHazteSocioPopup”,但它没有设置器
- xml - XSLT 模板匹配中的以下兄弟如何工作?
- openssl - 在配置/构建 OpenSSL 时设置库路径
- ssl - 在 Kubernetes 集群中哪些通道应该使用 SSL?
- python-3.8 - Postgresql 12 命令行参数 initdb 通过 Python 3 代码,如何进行?
- python - 我可以从人口普查 API 中获取地名和变量标签吗?
- javascript - 比较 .where() 中的 Firestore 时间戳不起作用
- python - InvalidArgumentError:[0, 0] 中的预期大小 [0],但得到 1
- sql - 在 ClickHouse 中使用 has(x,y) 函数优化 Array 类型列的数据查找
- arrays - 基于scala中的条件的数组过滤