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/...