r将数据集从长到宽转换为所有组合

问题描述 投票:0回答:1

假设这是我的数据集。

 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排 - 第2排

第1排 - 第3排

第1排 - 第4排

第2排 - 第3排

第2排 - 第4排

第3排 - 第4排

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

r transform reshape2
1个回答
0
投票

假设您的数据框名为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
© www.soinside.com 2019 - 2024. All rights reserved.