+1 por nos lembrar Reducee a capitalização correta de R!
Mariotomo 12/08
8
Vale ressaltar que intersecté para operações definidas. Se houver elementos recorrentes nos vetores, você perderá essas informações porque os vetores são transformados em conjuntos antes da interseção. Por exemplo intersect(c(1,1,2,3), c(1,1,3,4)), resultaria em c(1,3), e você poderia ter desejado o resultado c(1,1,3).
Giora Simchoni 13/10
1
@GioraSimchoni como você conseguiu c (1,1,3), se é isso mesmo que você quer?
StatsSorceress
@StatsSorceress Suponha que você queira a "interseção preservando duplicatas" de vetores que consistem em números inteiros positivos, todos em uma lista L. O código a seguir funciona: N <- max(unlist(L)); LT <- lapply(L, tabulate, nbins = N); v <- do.call(pmin, LT); unlist(sapply(1:N, function(x) rep(x, v[x])))Outra maneira de fazer isso usaria a matchfunção junto com a assinatura negativa para remover iterativamente de cada um dos vetores todos os elementos adicionados ao "kernel".
Montgomery Clift
24
Uma boa resposta já, mas existem algumas outras maneiras de fazer isso:
c
como nome de variável ...c(1,2...)
.Respostas:
Pode haver uma maneira mais inteligente de fazer isso, mas
fará o trabalho.
EDIT: Mais inteligente e mais conveniente se você tiver muitos argumentos:
fonte
Reduce
e a capitalização correta de R!intersect
é para operações definidas. Se houver elementos recorrentes nos vetores, você perderá essas informações porque os vetores são transformados em conjuntos antes da interseção. Por exemplointersect(c(1,1,2,3), c(1,1,3,4))
, resultaria emc(1,3)
, e você poderia ter desejado o resultadoc(1,1,3)
.N <- max(unlist(L)); LT <- lapply(L, tabulate, nbins = N); v <- do.call(pmin, LT); unlist(sapply(1:N, function(x) rep(x, v[x])))
Outra maneira de fazer isso usaria amatch
função junto com a assinatura negativa para remover iterativamente de cada um dos vetores todos os elementos adicionados ao "kernel".Uma boa resposta já, mas existem algumas outras maneiras de fazer isso:
ou,
Você pode, obviamente, omitir as
unique
chamadas se você sabe que existem valores não repetidos dentroa
,b
ouc
.fonte
UPDATE EDIT Um código mais simples
fonte