5  Laboratorio de R 3. Operadores utilizados en R

En este capitulo se revisarán a los operadores, unos símbolos que nos serán de mucha ayuda para realizar operaciones, asignaciones, pruebas lógicas, filtrado de bases de datos etc. Algunos de estos operadores (los numéricos) ya fueron revisados en el capitulo 1. En este, solamente revisaremos los operadores relacionales, lógicos y de asignación.

5.1 Operadores relacionales

Muchas veces necesitamos hacer comparaciones de dos variables o de dos números. Los operadores relacionales nos sirven para ayudan a realizar estas comparaciones. Como resultado siempre obtendremos una de dos respuestas TRUE o FALSE, cuando se cumpla o no respectivamente la condición de relación que establecimos. Los operadores relacionales se muestran en la tabla:

La tabla Tabla 5.1 muestra los datos que necesitaremos para nuestros ejercicios.

Tabla 5.1: Operadores relacionales en R
Operadores relacionales
Operador Comparación Ejemplo Resultado
< Menor que 7 < 4 FALSE
<= Menor o igual que 7 <= 4 FALSE
> Mayor que 7 > 4 TRUE
>= Mayor o igual que 7 >= 4 TRUE
== Exactamente igual que 7 == 4 FALSE
!= No es igual que 7 != 4 TRUE

Note como el símbolo == indica igualdad. Es muy importante que recuerde esto, ya que un solo signo de = se utiliza para asignar.

Los operadores relacionales, tienen la ventaja que nos permite comparar cualquier tipo de dato sin arrojar un error. Aunque comparar rojo y blanco no tiene mucho sentido.

5.2 Operadores lógicos

Los operadores lógicos son operaciones que se utilizan para describir relaciones lógicas y siempre darán como resultado una respuesta dicotómica. En el caso de cumplirse la relación lógica que estamos evaluando el resultado será TRUE, si está por el contrario no se cumple el resultado será FALSE. La tabla Tabla 5.2 muestra los operadores lógicos utilizados en R.

Tabla 5.2: Operadores lógicos en R
Operador Comparación
x | y x Ó y es verdadero
x & y x Y y son verdaderos
!x x no es verdadero (negación)
isTRUE(x) x es verdadero (afirmación)

Vamos a poner en práctica y a usar los operadores relacionales y lógicos. Para ello, vamos a utilizar la muestra de 12 pacientes de la base de datos bacteria Tabla 9.2.

Muestra de 12 datos del data frame bacteria
ID y ap hilo week trt time age
Patient A n a hi 6 drug+ 24 5
Patient B n a hi 2 drug+ 18 3
Patient C n a hi 4 drug+ 7 3
Patient D n a hi 6 drug+ 26 4
Patient E n p hi 0 placebo 26 4
Patient F y p hi 6 placebo NA 3
Patient G y p hi 11 placebo NA 4
Patient H y a lo 0 drug NA 7
Patient I y a lo 2 drug NA 6
Patient J y a lo 4 drug NA 3
Patient K y a lo 6 drug NA 3
Patient L n a lo 2 drug 20 4

Lo primero será crear tres objetos, uno para las edades de los pacientes A al D (drug+), otro para las edades de los pacientes E al G (placebo) y uno más para los pacientes H al L (drug). Para fines prácticos nombraremos estos objetos de la siguiente forma:

  • Pacientes_A, para los pacientes A al D (drug+)
  • Pacientes_E, para los pacientes E al G (placebo)
  • Pacientes_H, para los pacientes H al L (drug)

El siguiente código muestra como crear los objetos:

Pacientes_A <- c(5,3,3,4)
Pacientes_E <- c(4,3,4)
Pacientes_H <- c (7,6,3,3,4)

Supongamos que necesitamos saber cuantos pacientes de cada uno de los grupo tienen una edad mayor a 5, para ello podemos utilizar el siguiente código:

Pacientes_A>5

Esto dará como resultado

[1] FALSE FALSE FALSE FALSE

Ninguno de los pacientes tiene una edad mayor a 5. Ahora pruebe con los otros dos objetos.

Pacientes_E>5
[1] FALSE FALSE FALSE
Pacientes_H>5
[1]  TRUE  TRUE FALSE FALSE FALSE

Con los operadores relacionales también podemos comparar dos objetos. Por ejemplo, ¿las edades de los pacientes del grupo A serán mayor que la de las edades del grupo E?

Pacientes_A>Pacientes_E
Warning in Pacientes_A > Pacientes_E: longer object length is not a multiple of
shorter object length
[1]  TRUE FALSE FALSE FALSE

Lo que hizo R fue comparar cada por pares las edades del grupo A con las del grupo E. Preste atención a la advertencia que indica que uno de los objetos.

5.3 Ejercicios operadores relacionales y lógicos

Para resolver estos ejercicios cree un nuevo script, que deberá ser entregado como parte de las actividades de esta sesión. Importante que en el script se cuente con un código para la creación de los objetos con la edades de los pacientes.

Ejercicio 5.1 Identifique cuantos de los pacientes del grupo H (Pacientes_H) tienen una edad menor a 3 o un edad mayor a 5.

Lo primero es crear los objetos:

Pacientes_A <- c(5,3,3,4)
Pacientes_E <- c(4,3,4)
Pacientes_H <- c (7,6,3,3,4)

El código anterior es igual al creado anteriormente, solo se muestra para fines prácticos.

Identifique cuantos de los pacientes del grupo H (Pacientes_H) tienen una edad menor a 3 o un edad mayor a 5.

Pacientes_H>5|Pacientes_H<3
[1]  TRUE  TRUE FALSE FALSE FALSE

Hay dos pacientes con una edad menor a 3 o un edad mayor a 5.

Ejercicio 5.2 En los tres grupos de pacientes ¿Cuantos tienen edades entre 4 y 6 años?

En los tres grupos de pacientes ¿Cuantos tienen edades entre 4 y 6 años?

Para facilitar la resolución de las siguientes preguntas se creará un objeto llamado edades que contendrá la unión de las edades de los tres grupos. Recuerde que puede unir y hacer operaciones con los objetos.

edades <- c(Pacientes_A, Pacientes_E, Pacientes_H)

Ahora ya podemos conocer cuantos pacientes tienen edades entre 4 y 6 años.

edades>=4&edades<=6
 [1]  TRUE FALSE FALSE  TRUE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE

Hay 6 pacientes con edades entre los 4 y 6 años. Note como es se utilizó el símbolo & para indicar dos condiciones. En estos casos es necesario volver a poner la condición completa y utilizar de nueva cuenta edades.

Se puede utilizar la función table que permite contar cuantos falsos y cuantos negativos existen.

table(edades>=4&edades<=6)

FALSE  TRUE 
    6     6 

Ejercicio 5.3 ¿Cuantos pacientes del grupo A tienen una edad mayor o igual a 4?

table(Pacientes_A>=4)

FALSE  TRUE 
    2     2 

La función table() permite contar

Ejercicio 5.4 ¿Cuantos pacientes de los tres grupos tienen una edad exactamente igual a 4?

table(edades==4 )

FALSE  TRUE 
    8     4 

Ejercicio 5.5 ¿Cuantos de los pacientes en los tres grupos tienen una edad diferente de 5?

table(edades!=5)

FALSE  TRUE 
    1    11 

Ejercicio 5.6 ¿Cuantos pacientes tienen una edad exactamente igual 3 o una edad mayor o igual a 6 años?

table(edades==3|edades>=6)

FALSE  TRUE 
    5     7 

Ejercicio 5.7 ¿El promedio de las edades de los pacientes del grupo A (Pacientes_A) es mayor o igual al promedio de las edades del grupo H (Pacientes_H)?

mean(Pacientes_A)>mean(Pacientes_H)
[1] FALSE

Para la resolución de esta pregunta se utilizó la función mean que devuelve la media de un conjunto de datos.