繁体   English   中英

在 R 中生成向量元素的所有可能组合

[英]Generating all possible combinations of the elements of a vector in R

有了向量,

v1 <- LETTERS[1:4]

我想获得以下类型的两列 data.frame:

A B 

A C

A D

B A

B C

B D

D A

D B

D C

我尝试过使用combncombnexpand.grid但没有得到我想要的。

do.call(rbind, lapply(seq_along(v1), function(i) data.frame(x = v1[i], y = v1[-i])))

或者

do.call(rbind, lapply(seq_along(v1), function(i){
    do.call(rbind, lapply(seq_along(v1)[-i], function(j){
        c(v1[i], v1[j])
    }))
}))

或者

d = expand.grid(replicate(2, v1, simplify = FALSE))
d[d$Var1 != d$Var2,]
outer(v1, v1, paste, sep="")
     [,1] [,2] [,3] [,4]
[1,] "AA" "AB" "AC" "AD"
[2,] "BA" "BB" "BC" "BD"
[3,] "CA" "CB" "CC" "CD"
[4,] "DA" "DB" "DC" "DD"

如果您想要两列中所有可能的 AA - DD 组合,您可以使用 tidyr crossing功能。

这将是我的方法:

library(tidyverse)

v1 <- LETTERS[1:4]
v2 <- v1

final_df <- crossing(v1, v2)

所有解决方案都很好。 使用额外的一行命令,您可以过滤掉包含 AA、BB、CC 和 D D 的行。

使用马特的例子,

final_df <- final_df %>% 过滤器(v1 != v2)

谢谢!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM