Использование 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