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.