简体   繁体   中英

Transpose from long to wide with pair groups in r

I have descriptive statistics for four groups. My sample dataset is:

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

I would like to compare groups as pairs and need the descriptive information side by side for each pair.

Here is what I would like to have:

在此处输入图像描述

So, each grade has 6 pairs of groups.

Does anyone have any idea on this?

Thanks!

1) sqldf We can join df to itself on the indicated condition. Note that we escaped group since group is an sql keyword.

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]')

giving:

   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 We can perform a merge on part of the condition and then subset it for the remainder. The names are slightly different so you will need to change them if that is important.

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

giving:

   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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM