¡+1 por recordarnos Reducey la correcta capitalización R!
mariotomo
8
Vale la pena señalar que intersectes para operaciones de configuración. Si tiene elementos recurrentes en los vectores, perderá esta información porque los vectores se convierten en conjuntos antes de la intersección. Por ejemplo, intersect(c(1,1,2,3), c(1,1,3,4))daría como resultado c(1,3), y es posible que haya querido el resultado c(1,1,3).
Giora Simchoni
1
@GioraSimchoni, ¿cómo podrías obtener c (1,1,3), si eso es realmente lo que quieres?
EstadísticasSorceress
@StatsSorceress Suponga que desea los "duplicados que preservan la intersección" de los vectores que consisten en enteros positivos, todos en una lista L. El siguiente código 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])))Otra forma de hacerlo sería usar la matchfunción junto con la suscripción negativa para eliminar iterativamente de cada uno de los vectores cada elemento agregado al "kernel".
Montgomery Clift
24
Una buena respuesta ya, pero hay un par de otras formas de hacerlo:
c
como nombre de variable ...c(1,2...)
.Respuestas:
Puede haber una forma más inteligente de hacerlo, pero
Hará el trabajo.
EDITAR: de manera más inteligente y más conveniente si tiene muchos argumentos:
fuente
Reduce
y la correcta capitalización R!intersect
es para operaciones de configuración. Si tiene elementos recurrentes en los vectores, perderá esta información porque los vectores se convierten en conjuntos antes de la intersección. Por ejemplo,intersect(c(1,1,2,3), c(1,1,3,4))
daría como resultadoc(1,3)
, y es posible que haya querido el 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])))
Otra forma de hacerlo sería usar lamatch
función junto con la suscripción negativa para eliminar iterativamente de cada uno de los vectores cada elemento agregado al "kernel".Una buena respuesta ya, pero hay un par de otras formas de hacerlo:
o,
Obviamente, puede omitir las
unique
llamadas si sabe que no hay valores repetidos dentro dea
,b
oc
.fuente
ACTUALIZAR EDITAR Un código más simple
fuente