Я хотел бы найти более короткий способ вычисления последовательной разницы между сгруппированными векторами в таблице (не 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» является единственным элементом, не включенным во все предыдущие группы.