R: Поворот дольше путем объединения столбцов на основе фактора - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть фрейм данных, который имеет четыре столбца. Я хотел бы использовать какой-нибудь pivot_longer (как в tidyr), но объединить каждое значение четырех столбцов два на два на основе идентификатора.

Например, если у меня есть

id     A     B     C     D
  <dbl> <dbl> <dbl> <dbl> <dbl>
1     1    10     5     4     0

Я хотел бы получить:

  id factor_1 factor_2 value_1 value_2
1  1        A        B      10       5
2  1        A        C      10       4
3  1        A        D      10       0
4  1        B        C       5       4
5  1        B        D       5       0
6  1        C        D       4       0

Большое спасибо за любые предложения.

Бест.

1 Ответ

1 голос
/ 16 апреля 2020

Использование pivot_longer() - это одна часть, но вам все равно нужно будет генерировать парные комбинации. В приведенном ниже коде используется самостоятельное соединение с использованием inner_join(), но есть несколько других способов решения этой проблемы.

    library("tidyverse")
    df <- tribble(
      ~id, ~A, ~B, ~C, ~D,
      1, 10, 5, 4, 0)
    df_longer <- df %>%
      pivot_longer(cols = c(A, B, C, D), names_to = "factor", values_to = "value") 
    df_longer %>%
      inner_join(df_longer, by = "id", suffix = c("_1", "_2")) %>%
      filter(factor_1 < factor_2)
    #> # A tibble: 6 x 5
    #>      id factor_1 value_1 factor_2 value_2
    #>   <dbl> <chr>      <dbl> <chr>      <dbl>
    #> 1     1 A             10 B              5
    #> 2     1 A             10 C              4
    #> 3     1 A             10 D              0
    #> 4     1 B              5 C              4
    #> 5     1 B              5 D              0
    #> 6     1 C              4 D              0
...