Tenho dados parecidos com estes:
Tab4 <- read.table(text = "
nodepair `++` `--` `+-` `-+` `0+` `+0` `0-` `-0` `00` ES
1 A1_A1 0 4 0 0 0 0 0 0 16 3
2 A1_A1 0 5 0 0 0 0 0 0 16 4
3 A1_A1 0 5 0 0 0 0 0 0 15 5
", header = TRUE)
e escrevi este código para que cada grupo 'ES' seja comparado aos pares por nodepair:
ES_combs <- combn(unique(Tab4$ES), 2, simplify = FALSE)
Tab5 <- Tab4 %>% ########### compare every pair to eachother
group_split(nodepair) %>%
map(.f = function(df) df %>%
map(.x = 1:length(ES_combs),
.f = ~df %>%
filter(ES %in% ES_combs[[.x]]) %>%
summarize(nodepair = first(nodepair),
ES_1 = ES[1],
ES_2 = ES[2],
across(2:10, ~as.numeric(.))))) %>%
bind_rows()
resultando nisso:
Tab5 <- read.table(text = "
nodepair ES_1 ES_2 `++` `--` `+-` `-+` `0+` `+0` `0-` `-0` `00`
1 A1_A1 3 4 0 4 0 0 0 0 0 0 16
2 A1_A1 3 4 0 5 0 0 0 0 0 0 16
3 A1_A1 3 5 0 4 0 0 0 0 0 0 16
4 A1_A1 3 5 0 5 0 0 0 0 0 0 15
5 A1_A1 4 5 0 5 0 0 0 0 0 0 16
6 A1_A1 4 5 0 5 0 0 0 0 0 0 15
", header = TRUE)
Isso funciona, mas demora muito quando estou comparando meu conjunto de dados completo. Eu esperava que houvesse um código mais eficaz. Suspeito que este aviso que recebo esteja expondo parte do problema:
Warning messages:
1: Returning more (or less) than 1 row per `summarise()` group was deprecated in dplyr 1.1.0.
ℹ Please use `reframe()` instead.
ℹ When switching from `summarise()` to `reframe()`, remember that `reframe()` always returns an ungrouped
data frame and adjust accordingly.
mas não tenho certeza para onde ir a partir daqui.
Podemos fazer uma junção interna e remover duplicatas: