1
votes

Non dupliqué supprimer le sous-ensemble

("B"  "A"  "B")

4 Réponses :


1
votes

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"


1 commentaires

Merci. Cela aidera beaucoup



1
votes

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"


0 commentaires

1
votes

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"


0 commentaires

1
votes

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)


1 commentaires

Ceci est encore plus utile. Réduira beaucoup de mon code.