r - 不同长度的向量元素的所有组合,条件是每个向量只选择一个元素而忽略顺序?
问题描述
假设我们有三个向量:
v_1 = c("a", "b", "c", "d")
v_2 = c("e", "f", "g")
v_3 = c("h", "i")
我想使用 R 在以下条件下检索所有可能长度的这三个向量的所有组合的完整列表:
- 我们可以为每个向量选择最多 1 个元素(例如,组合 "ab" 应被忽略,因为它们都属于
v_1
) - 顺序并不重要(例如,“ae”和“ea”的组合只计算一次)。
鉴于我已经正确完成了数学运算,我们最终应该得到 59 种不同的长度为 1 到 3 的组合。我研究了这个combn()
函数,但应用这两个条件似乎很困难(或不可能?)。有没有人有关于如何在 R 中解决这个问题的建议?
谢谢!
解决方案
我认为您的一般方法是合理的,但可以通过将向量列表直接传递给combn()
并expand.grid()
在其函数参数中使用来简化。然后您需要做的就是将输出绑定到数据框中。
v_1 = c("a", " b", "c", "d")
v_2 = c("e", "f", "g")
v_3 = c("h", "i")
library(purrr)
library(dplyr)
my_list <- list(v_1, v_2, v_3)
map(seq_along(my_list), ~combn(my_list, .x, FUN = function(x) list(expand.grid(x, stringsAsFactors = FALSE)))) %>%
map_df(bind_rows)
Var1 Var2 Var3
1 a <NA> <NA>
2 b <NA> <NA>
3 c <NA> <NA>
4 d <NA> <NA>
5 e <NA> <NA>
6 f <NA> <NA>
7 g <NA> <NA>
8 h <NA> <NA>
9 i <NA> <NA>
10 a e <NA>
...
58 c g i
59 d g i
推荐阅读
- ios - 向 fastlane/cocoapods 提供 git 凭据
- python - python argparse:如何使参数依赖于另一个参数的选择
- configuration - Azure DevOps - Azure 资源组部署:动态设置订阅值
- angular - 是否可以在 Angulars 中按 id 选择
? - azure-active-directory - 租户成员在查询来宾开放分机时有哪些权限?
- mysql - 批量 MySQL 插入比 PHP 慢 2 倍
- php - Mysql查询用php匹配关键字并根据最匹配排名
- r - R中许多矩阵的乘法
- angular - 角度“未定义标识符‘todos’。”
- cookies - 将电子邮件查询字符串存储在 cookie 中后删除它