4 Réponses :
Voici une façon de faire ceci:
#Count occurrences of `a` a_count <- table(a) #Count occurrences of `b` b_count <- table(b) #Subtract the count present in b from a a_count[names(b_count)] <- a_count[names(b_count)] - b_count #Create a new vector of remaining values rep(names(a_count), a_count) #[1] "A" "B" "B"
Merci. Cela aidera beaucoup
En utilisant tibble
et dplyr
, vous pouvez faire:
enframe(a) %>% transmute(name = value) %>% group_by(name) %>% mutate(ID = 1:n()) %>% left_join(enframe(table(b)), by = c("name" = "name")) %>% filter(ID > value | is.na(value)) %>% pull(name) [1] "B" "A" "B"
Ou :
a <- c("A", "B", "C", "A", "A", "B") b <- c("A", "C", "A") greedy_delete <- function(x, rmv) { for (i in rmv) { x <- x[-which(x == i)[1]] } x } greedy_delete(a, b) #"B" "A" "B"
Une option simple consiste à utiliser vsetdiff
à partir du package vecsets
, c'est-à-dire
> vecsets::vsetdiff(a,b) [1] "B" "A" "B"
tel que
vecsets::vsetdiff(a,b)
Ceci est encore plus utile. Réduira beaucoup de mon code.
pourrait être pertinent: stackoverflow.com/questions/45672743/... et stackoverflow.com/questions/52941312/...