Execute comparações de todos para todos sem pares entre dois vetores de caracteres não ordenados - O oposto de intersecção - setdiff de todos para todos
EXEMPLO DE DADOS
v1 <- c("E82391", "X2329323", "C239923", "E1211", "N23932", "F93249232", "X93201", "X9023111", "O92311", "9000F", "K9232932", "L9232932", "X02311111")
v2 <- c("L9232932", "C239923", "E1211", "E82391", "F93249232", "U82832")
PROBLEMA
Quero extrair apenas os itens que estão em um dos vetores e não no outro.
Eu entendi aquilosetdiff
é incapaz de comparar dois vetores de caracteres não ordenados e encontrar todas as diferenças entre os dois.
Por exemplo,%in%
executar comparações de todos para todos entre dois vetores de caracteres?
Nesse caso, ele funciona (embora não relate os elementos que estão emv2
e não emv1
)
> v1[!v1 %in% v2]
[1] "X2329323" "N23932" "X93201" "X9023111" "O92311" "9000F" "K9232932" "X02311111"
Outra maneira é usar uma função definida pelo usuário chamadaoutersect
Comomostrado aqui que mostra todas as diferenças.
outersect <- function(x, y) {
sort(c(x[!x%in%y],
y[!y%in%x]))
}
outersect(v1,v2)
PERGUNTA, QUESTÃO
Estou realmente interessado em saber se existem funções R que facilmente realizariam comparações completas entre dois vetores de caracteres! A idéia é realmente melhorar a legibilidade do código (especialmente quando existem dezenas de vetores que precisam ser comparados).
Qual é a maneira mais segura e eficiente de realizar essas comparações tudo a todos? Mais especificamente, existe uma função em R que
Referências.
Breyal, Tony. "outersect (): o oposto da função intersect () de R", Novembro de 2011. R-bloggers.