使用 r 中的对组从长转为宽

Transpose from long to wide with pair groups in r

我有四组的描述性统计数据。我的示例数据集是:

df <- data.frame(
  Grade =  c(3,3,3,3,4,4,4,4),
  group = c("none","G1","G2","both","none","G1","G2","both"),
  mean=c(10,12,13,12,11,18,19,20),
  sd=c(22,12,22,12,11,13,14,15),
  N=c(35,33,34,32,43,45,46,47))

> df
  Grade group mean sd  N
1     3   none   10 22 35
2     3     G1   12 12 33
3     3     G2   13 22 34
4     3   both   12 12 32
5     4   none   11 11 43
6     4     G1   18 13 45
7     4     G2   19 14 46
8     4   both   20 15 47

我想将各组成对进行比较,并且需要每对并排的描述信息。

这是我想要的:

所以,每个年级有6对小组。

有没有人对此有任何想法?

谢谢!

1) sqldf 我们可以在指定条件下将 df 连接到自身。请注意,我们转义了 group,因为 group 是一个 sql 关键字。

library(sqldf)

sqldf('select 
  a.Grade, 
  a.[group] Group1, b.[group] Group2,
  a.mean mean1, b.mean mean2,
  a.sd sd1, b.sd sd2,
  a.N n1, b.N n2
from df a
join df b on a.Grade = b.Grade and a.[group] > b.[group]')

给予:

   Grade Group1 Group2 mean1 mean2 sd1 sd2 n1 n2
1      3   none     G1    10    12  22  12 35 33
2      3   none     G2    10    13  22  22 35 34
3      3   none   both    10    12  22  12 35 32
4      3     G2     G1    13    12  22  12 34 33
5      3   both     G1    12    12  12  12 32 33
6      3   both     G2    12    13  12  22 32 34
7      4   none     G1    11    18  11  13 43 45
8      4   none     G2    11    19  11  14 43 46
9      4   none   both    11    20  11  15 43 47
10     4     G2     G1    19    18  14  13 46 45
11     4   both     G1    20    18  15  13 47 45
12     4   both     G2    20    19  15  14 47 46

2) base R 我们可以对条件的一部分进行合并,然后对剩余的条件进行子集化。名称略有不同,因此如果这很重要,您需要更改它们。

subset(merge(df, df, by = "Grade"), group.x > group.y)

给予:

   Grade group.x mean.x sd.x N.x group.y mean.y sd.y N.y
2      3    none     10   22  35      G1     12   12  33
3      3    none     10   22  35      G2     13   22  34
4      3    none     10   22  35    both     12   12  32
8      3      G1     12   12  33    both     12   12  32
10     3      G2     13   22  34      G1     12   12  33
12     3      G2     13   22  34    both     12   12  32
18     4    none     11   11  43      G1     18   13  45
19     4    none     11   11  43      G2     19   14  46
20     4    none     11   11  43    both     20   15  47
24     4      G1     18   13  45    both     20   15  47
26     4      G2     19   14  46      G1     18   13  45
28     4      G2     19   14  46    both     20   15  47