studio - Eliminar valores de un vector que no están duplicados al menos x veces
funcion cbind en r (2)
Puedes hacer esto en una línea con la función ave
:
a[ave(a, a, FUN=length) >= 3]
# [1] 2 2 5 3 5 3 2 5 3
La llamada a ave(a, a, FUN=length)
devuelve, para cada elemento a[i]
en el vector a
, el número total de veces que aparece a[i]
dentro de a
. Luego puede subconjuntar a
, limitando a los índices donde la cantidad total de veces es 3 o más.
Dado un vector:
p.ej.:
a = c(1, 2, 2, 4, 5, 3, 5, 3, 2, 1, 5, 3)
Usando a[a%in%a[duplicated(a)]]
puedo eliminar valores no duplicados. Sin embargo, solo funciona para valores que solo están presentes una vez.
¿Cómo podría continuar eliminando todos los valores que no están presentes en este tres veces? (o más, en otras situaciones)
El resultado esperado sería:
2 2 5 3 5 3 2 5 3
con 1 y 4 eliminado, ya que solo están presentes dos veces y una vez
Razonablemente sencillo (más largo que usar ave
pero posiblemente más comprensible):
x <- c(1,2,2,4,5,3,5,3,2,1,5,3)
tt <- table(x) ## tabulate
## find relevant values
ttr <- as.numeric(names(tt)[tt>=3])
x[x %in% ttr] ## subset