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.