【问题标题】:r transform dataset from long to wide with all combinationsr 使用所有组合将数据集从长转换为宽
【发布时间】:2019-04-24 18:46:28
【问题描述】:

假设这是我的数据集。

 Type   Drat  Qsec   Wt
 Mazda  3.9   16.46  2.620
 Toyota 3.85  17.02  2.875
 Ford   3.15  3.44   17.02
 Duster 3.21  15.84  18.3

我有兴趣将这个数据集转换成这样的格式

 Type.x   Drat.x  Qsec.x   Wt.x      Type.y  Drat.y  Qsec.y   Wt.y 
 Mazda    3.9     16.46    2.620     Toyota  3.85    17.02   2.875
 Mazda    3.9     16.46    2.620     Ford    3.15    3.44    17.02
 Mazda    3.9     16.46    2.620     Duster  3.21    15.84   18.3

 Toyota   3.85    17.02    2.875     Ford    3.15    3.44    17.02
 Toyota   3.85    17.02    2.875     Duster  3.21    15.84   18.3

 Ford     3.15    3.44     17.02     Duster  3.21    15.84   18.3

第一行 - 第二行

第一行 - 第三行

第 1 行 - 第 4 行

第二行 - 第三行

第 2 行 - 第 4 行

第 3 行 - 第 4 行

我不太清楚如何有效地做到这一点。任何建议都非常感谢。

【问题讨论】:

    标签: r transform reshape2


    【解决方案1】:

    假设您的数据框名为df;我创建了一个这样的示例 df:

    df <- mtcars[2:5,c("drat","qsec","wt")]
    df$Type <- rownames(df)
    
    > df
                      drat  qsec    wt              Type
    Mazda RX4 Wag     3.90 17.02 2.875     Mazda RX4 Wag
    Datsun 710        3.85 18.61 2.320        Datsun 710
    Hornet 4 Drive    3.08 19.44 3.215    Hornet 4 Drive
    Hornet Sportabout 3.15 17.02 3.440 Hornet Sportabout
    

    我们可以将dplyr 与一系列组合、转换和连接一起使用。

    library(dplyr)
    
    t(combn(df$Type,2)) %>% 
      as.data.frame() %>% 
      rename(Type.x = V1,Type.y = V2) %>% 
      inner_join(df,by = c("Type.x" = "Type")) %>% 
      inner_join(df,by = c("Type.y" = "Type"))
    
              Type.x            Type.y drat.x qsec.x  wt.x drat.y qsec.y  wt.y
    1  Mazda RX4 Wag        Datsun 710   3.90  17.02 2.875   3.85  18.61 2.320
    2  Mazda RX4 Wag    Hornet 4 Drive   3.90  17.02 2.875   3.08  19.44 3.215
    3  Mazda RX4 Wag Hornet Sportabout   3.90  17.02 2.875   3.15  17.02 3.440
    4     Datsun 710    Hornet 4 Drive   3.85  18.61 2.320   3.08  19.44 3.215
    5     Datsun 710 Hornet Sportabout   3.85  18.61 2.320   3.15  17.02 3.440
    6 Hornet 4 Drive Hornet Sportabout   3.08  19.44 3.215   3.15  17.02 3.440
    

    【讨论】:

      猜你喜欢
      • 2016-07-29
      • 1970-01-01
      • 2020-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-25
      • 2019-07-23
      • 2020-09-18
      相关资源
      最近更新 更多