Filtrado
Copia, Pega y Adapta
grupo1=subset(datos, var1=='A' & var2 <= 18)
grupo2=subset(datos, var1!='A' & var2 > 8 | var2 < 15)
indice = datos1$sujeto %in% datos2$sujeto
estan = datos1[indice,]
noestan= datos1[!indice,]
OBJETIVO
Filtra bases de datos, a partir de condiciones impuestas por el usuario.
Quizás necesites consultar previamente el uso de los operadores lógicos
subset
Utilizaremos la base de datos disponible directamente en R OBrienKaiser.
gr.1 = subset(OBrienKaiser, treatment == 'control' & pre.3 > 4 )
Guardamos en el objeto gr.1 aquellos registros de la base de datos OBrienKaiser que pertenezcan al grupo control y (&) que su valor en la variable pre.3 sea superior a 4.
gr.2 = subset(OBrienKaiser, treatment != 'control' | pre.3 <= 3 )
Guardamos en gr.2 los registros diferentes al grupo control(!=) o (|) cuyo valor en la variable pre.3 sea menor o igual a 3.
gr.3 = subset(OBrienKaiser, (treatment != 'control' & pre.3 <= 3) | (treatment == 'A' & pre.1 > 5) )
Guardamos en gr.3 los registros cuyo tratamiento sea distinto al grupo control y el valor de pre.3 menor o igual a 3 o el nivel de tratamiento sea A y el valor de pre.1 mayor de 5.
Supongamos la existencia de una base de datos ficticia de nombre integracion con niños autóctonos e inmigrantes controlados con la variable origen. En la variable ingresos tenemos algunos niños inmigrantes con valores en ingresos superiores a los 2500€ y que constituyen unos casos extremos claros en un diagrama de cajas y deseamos por tanto eliminarlos.
seleccion=subset(integracion, origen=='autoctono' |
(origen=='inmigrante' & ingreso < 2500) )
Ahora seleccion tiene a los mismos niños de la base de datos integracion salvo a los niños inmigrantes cuyos ingresos sean superiores a los 2500€.
Operador %in%
El operador %in% es de una gran utilidad cuando queremos por ejemplo seleccionar de una base de datos aquellos registros que están o no en otra.
Veamos un ejemplo:
Sobre la base de datos iris que contiene 150 registros, crearemos una variable de nombre registro con el fin de identificar inequívocamente a cada registro.
iris$registro=1:150
Ahora extraeremos una muestra aleatoria de iris de 75 observaciones:
muestra=extrae.muestra.fnc(iris, n=75, ID='registro')
Ahora queremos seleccionar a los registros de iris que no han participado en la muestra. Para ello crearemos en primer lugar una variable lógica (solo tiene valores verdadero o falso) que llamaremos indice utilizando precisamente el operador %in%
indice= iris$registro %in% muestra$registro
Aquí solicitas que indique con verdadero (T) o falso (F) aquellos casos de la variable registro en iris que se encuentran en registro de muestra.
head(indice)
[1] TRUE FALSE FALSE FALSE FALSE TRUE
El registro (caso) 1 y 6 de iris está también en la muestra.
Ahora puedo utilizar la variable lógica generada indice para seleccionar de iris aquellos sujetos que forman parte de la muestra:
iris[indice,]
o aquellos que NO forman parte de dicha muestra y que guardamos en resto.
resto=iris[!indice,]
Observa que con el caracter ! decimos negación de índice, o lo que es lo mismo si un registro es verdadero en índice y por lo tanto forma parte de la muestra, cuando le ponemos delante dicho caracter el valor de índice será falso.
head(!indice)
[1] FALSE TRUE TRUE TRUE TRUE FALSE
Justamente los casos 1 y 6 aparecen ahora como falsos, y por lo tanto al incluir !indice provoco justamente que esos dos casos (y todos los que sean FALSE) no entren a formar parte de la nueva base de datos resto, dado que como es obvio pertenecen al objeto muestra.