Data Filtering
Maybe you need to preview using logical operators
Copy, Paste and Adapts
group1=subset(mydata, var1=='A' & var2 <= 18)
group2=subset(mydata, var1!='A' & var2 > 8 | var2 < 15)
Objetive
Filter databases, from conditions imposed by the user.
subset
We will use the database available directly on R OBrienKaiser.
gr.1 = subset(OBrienKaiser,
treatment == 'control' & pre.3 > 4 )
The object gr.1 will have the OBrienKaiser records belonging to control group (&) if the pre.3 value are greather than 4.
gr.2 = subset(OBrienKaiser,
treatment != 'control' | pre.3 <= 3 )
In gr.2 we will save the records differents to group control(!=) or (|) the records with value in pre.3 lower or equal to 3.
gr.3 = subset(OBrienKaiser,
(treatment != 'control' & pre.3 <= 3) |
(treatment == 'A' & pre.1 > 5) )
Gr.3 keep on records whose treatment is different from the control group and pre.3 value less than or equal to 3 or level of treatment is A and pre.1 value greater than 5.
%in% Operator
El operador %in% es de una gran utilidad cuando queremos por ejemplo seleccionar de una base de datos aquellos registros que estan 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$record=1:150
Ahora extraeremos una muestra aleatoria de iris de 75 observaciones:
my.sample=random.sample.fnc(iris, n=75, ID='record')
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%
index= iris$record %in% my.sample$record
Aquí solicitas que indique con verdadero (T) o falso (F) aquellos casos de la variable record en iris que se encuentran en record de mysample.
head(index)
[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 index para seleccionar de iris aquellos sujetos que forman parte de la muestra:
iris[index,]
o aquellos que NO forman parte de dicha muestra y que guardamos en remaining.
remaining=iris[!index,]
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(!index)
[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 remaining, dado que como es obvio pertenecen al objeto my.sample.