如何在单个列的级别之间获得所有可能的成对比较?

How to get all possible pairwise comparisons between levels of a single column?

考虑这个数据框:

set.seed(123)
dat1 <- data.frame(Loc = rep(letters[1:20], each = 10),
                   ID = 1:200,
                   var1 = rnorm(200))
dat1$ID <- factor(dat1$ID)

我想要 return 一个数据框,显示可以在 Loc 的水平上执行的所有可能的成对比较,它看起来像这样:

Loc1  Loc2
a       b
a       c
a       d
a       e
…
#and so on, just like a post hoc test would return (e.g. Tukey's)

但是如何在单个列的级别之间执行此操作?

您可以使用

new_df <- expand.grid(Loc1 = levels(dat1$Loc), Loc2 = levels(dat1$Loc))

如果我们检查前 25 行,我们会看到

head(new_df, 25)
#>    Loc1 Loc2
#> 1     a    a
#> 2     b    a
#> 3     c    a
#> 4     d    a
#> 5     e    a
#> 6     f    a
#> 7     g    a
#> 8     h    a
#> 9     i    a
#> 10    j    a
#> 11    k    a
#> 12    l    a
#> 13    m    a
#> 14    n    a
#> 15    o    a
#> 16    p    a
#> 17    q    a
#> 18    r    a
#> 19    s    a
#> 20    t    a
#> 21    a    b
#> 22    b    b
#> 23    c    b
#> 24    d    b
#> 25    e    b

也许combn能帮上忙

setNames(as.data.frame(t(combn(unique(dat1$Loc),2))),c("Loc1","Loc2"))

这样

> head(setNames(as.data.frame(t(combn(unique(dat1$Loc),2))),c("Loc1","Loc2")))
  Loc1 Loc2
1    a    b
2    a    c
3    a    d
4    a    e
5    a    f
6    a    g