r преобразование набора данных из длинного в широкий со всеми комбинациями - PullRequest
0 голосов
/ 24 апреля 2019

Предполагая, что это мой набор данных.

 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-й ряд

Мне не совсем понятно, как это сделать эффективно.Любые предложения приветствуются.

1 Ответ

0 голосов
/ 24 апреля 2019

Предположим, ваш фрейм данных называется 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...