установить разницу между последовательными векторами в тибле (накопительным способом) - PullRequest
1 голос
/ 21 июня 2019

Я хотел бы найти более короткий способ вычисления последовательной разницы между сгруппированными векторами в таблице (не A в B), где каждое различие находится между вектором в группе "x" и конкатенацией векторов во всех предыдущих группах. .

Я нашел решение, использующее anti_join в цикле for, но мне интересно, есть ли более краткий способ.

library(magrittr)
library(tidyverse)

tibble(stage = rep(1:4, each = 2),
       string = c("a", "b", "a", "c", "b", "d", "f", "e")) %>%
  (function(df) {
    df_filtered <- df %>%
      filter(stage == 1)

    for (stage_sub in unique(df$stage)) {
      df_filtered %<>%
        rbind(
          df %>%
            filter(stage == stage_sub) %>%
            anti_join(., df %>%
                        filter(stage %in% 1:(stage_sub-1)), by = "string")
        )
    }

    df_filtered
  })

Другими словами, если:

группа1: "а", "б"

группа2: "а", "с"

group3: "b", "d"

когда я вычисляю совокупную последовательную разницу между группой 3 и группой 1: 2, я должен получить:

group3: "d"

потому что «d» является единственным элементом, не включенным во все предыдущие группы.

...