我有两个看起来像这样的 df:
dat2 <- read.table(text = "
year nodepair `++` `--` `+-` `-+` `0+` `+0` `0-` `-0` `00` ES
1 1999 A1_A1 0 4 0 0 0 0 0 0 16 3
2 1999 A2_A1 0 0 0 0 0 0 0 0 20 3
3 1999 A2_A2 0 0 0 0 0 0 0 0 20 4
4 1999 A3_A1 0 0 0 0 0 2 0 0 18 4
5 1999 A3_A2 0 0 0 0 0 0 0 0 20 5
6 1999 A3_A3 0 5 0 0 0 0 0 0 15 5
", header = TRUE)
dat3 <- read.table(text = "
year nodepair `++` `--` `+-` `-+` `0+` `+0` `0-` `-0` `00` ES
1 1999 A1_A1 0 4 0 0 0 0 0 0 16 8
2 1999 A2_A1 0 0 0 0 0 0 0 0 20 8
3 1999 A2_A2 0 0 0 0 0 0 0 0 20 9
4 1999 A3_A1 0 0 0 0 0 2 0 0 18 9
5 1999 A3_A2 0 0 0 0 0 0 0 0 20 10
6 1999 A3_A3 0 5 0 0 0 0 0 0 15 10
", header = TRUE)
我正在编写一个使用成对列表来比较 ES 组之间的代码。在我能够成功地将它们放在一起并使用以下方法制作所有组合的成对列表之前:
dat4 <- rbind(dat2,dat3)
ES_combs <- combn(unique(dat4$ES), 2, simplify = FALSE)
但是这次我需要在这两组不同的 ES 之间制作一个成对列表来创建我的新函数。所以 3-8、3-9、3-10、4-8... 等不在集合内(不是 3-4、4-5)。
我想你正在寻找
> x = expand.grid(unique(dat2$ES), unique(dat3$ES))
> x = x[order(x$Var1), ]
> paste0(x$Var1, "-", x$Var2)
[1] "3-8" "3-9" "3-10" "4-8" "4-9" "4-10" "5-8" "5-9" "5-10"
这是@CPB评论的延伸。