![](/img/trans.png)
[英]R: all possible combinations from a vector of elements with 2 possible conditions (+/-)
[英]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
我尝试过使用combn
、 combn
和expand.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.