如何筛选或生成不考虑顺序的tibble组合?
两种实现方式:直接生成或筛选现有数据
一、直接生成带重复的无序组合
如果想一步到位生成符合要求的无序组合(允许元素重复,比如(1,1)这类),可以用gtools包的combinations()函数,设置repeats.allowed = TRUE:
library(gtools) library(tibble) # 生成无序组合并转为tibble as_tibble(combinations(n = 3, r = 2, v = c(1,2,3), repeats.allowed = TRUE), .name_repair = ~c("X1", "X2"))
运行后直接得到目标结果:
# A tibble: 5 × 2 X1 X2 <int> <int> 1 1 1 2 1 2 3 1 3 4 2 2 5 3 3
二、对已生成的tibble进行筛选
如果已经通过tidyr::crossing生成了全量有序组合,只需添加筛选条件X1 <= X2,就能去掉重复的无序组合:
library(tidyr) library(dplyr) crossing(X1 = c(1,2,3), X2 = c(1,2,3)) %>% filter(X1 <= X2)
这段代码会自动剔除X1 > X2的行(即你提到的第4、6、7、8行),最终得到和上面一致的结果。
内容的提问来源于stack exchange,提问作者Slash
相关产品推荐
相关产品推荐

