【问题标题】:Transpose from long to wide with pair groups in r用 r 中的对组从长到宽转置
【发布时间】:2020-12-17 00:24:35
【问题描述】:

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

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对组。

有人对此有任何想法吗?

谢谢!

【问题讨论】:

    标签: r transpose


    【解决方案1】:

    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
    

    【讨论】:

    • 当我运行base 解决方案时,我得到了这个错误。 Warning message: In Ops.factor(group.x, group.y) : ‘&gt;’ not meaningful for factors 。我应该改变什么吗?
    • 在您发布的df 中,group 是 R 4.0+ 下的字符,而不是因子。如果您有其他一些未显示的数据框,或者如果您使用的是旧版本的 R,它是因子,那么只需将其更改为字符或有序(即有序因子)。
    • 是的,就是这样。很棒的收获。感谢您的时间和解决方案。真的很感激!
    猜你喜欢
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多