如何在单个列的级别之间获得所有可能的成对比较?
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
考虑这个数据框:
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