Uso de la función mutate() de dplyr junto a un condicionante ifelse en R

Uno de los “verbos” que incluye la librería dplyr y que es realmente útil es el llamado mutate(). Mutate() sirve para crear nuevas variables/columnas a partir de la existentes. Esto nos va a permitir crear estas nuevas variables a partir de relaciones o condicionantes. En este post veremos su uso más simple y su uso con un if-else.

0. Dataset de inicio

Cargamos la librería dplyr y la librería readxl para leer un dataset ficticio desde un excel:

library(dplyr)
library(readxl)

df <- read_xlsx('prueba.xlsx')

El dataset contiene los siguientes datos y estructura:

Dataset usado para el ejemplo.

Observamos 9 filas y 3 columnas sobre las que aplicaremos mutate().

1. Uso básico de mutate()

Vamos en crear, en primer lugar, una nueva columna llamada SumVar que contenga la suma de cada valor en las tres primeras columnas:

df <- mutate(df, SumVar = rowSums(df[1:3]))

El resultado es el esperado:

Uso de mutate() para crear la columna SumVar.

Vemos como, por ejemplo, el primer valor de SumVar corresponde a la suma de los valores 18, 12.7 y 0.408, que exactamente lo previsto.

Veamos otro ejemplo sencillo: crearemos una nueva columna llamada Fila que mostrará el número de fila que le corresponde. Utilizaremos para ello la función row_number():

df <- mutate(df, Fila = row_number())

El resultado es, de nuevo, el previsto:

Uso de mutate() para crear la columna Fila.

2. Uso de una condición if-else en un mutate()

Respondiendo al título de este post, utilizaremos una condición ifelse() dentro del mutate() para crear una nueva columna.

En este ejemplo, crearemos una nueva columna llamada OverTemp que valdrá “1” si el valor de la columna B2 es mayor o igual que 40 y valdrá “0” en caso contrario:

df <- mutate(df, OverTemp = ifelse(B2 >= 40,1,0))

El código muestra claramente cómo usar una condición if-else dentro de mutate(). El resultado es el siguiente:

Ejemplo de uso de mutate() junto a un ifelse().

Finalizamos con un último ejemplo un poco más complejo: creamos una nueva variable, llamada Pair que valdrá TRUE si el entero de la división entre las variables A1 y C3 es un número par y valdrá FALSE en caso contrario. Recordamos que un número es par si al dividirlo entre 2, su resto es cero:

df <- mutate(df, Pair = ifelse(as.integer(df$A1/df$C3) %% 2 == 0, TRUE, FALSE))

El resultado es el siguiente:

Creación de la columna Pair con mutate() y una condición if-else.

Para comprobar si el resultado es correcto, visualizamos rápidamente los enteros de la división A1/C3:

Enteros de la división A1/C3

Por lo que se comprueba que el resultado es correcto.

Para saber más:
mutate() | Programación en R
Creating New Variables in R with mutate() and ifelse()
Can dplyr package be used for conditional mutating?

3 comentarios en “Uso de la función mutate() de dplyr junto a un condicionante ifelse en R”

  1. Hola, tengo un Tible con los siguientes datos:
    autor: 1001, 1001, 1001, 1001, 1002, 1002, 1002, 1002, 1003, 1003, 1003, 1004
    fecha: 2018/09, 2018/09, 2018/09, 2018/09, 2019/10, 2019/10, 2019/10, 2019/10, 2019/12, 2019/12, 2019/12, 2020/01
    Codigo: 1001, 1001, 1001, 1001, 1002, 1002, 1002, 1002, 1003, 1003, 1003, 1004
    Texto: casa, hotel, casa, hotel, peras, manzanas, limon, peras, casa, hotel, casa, casa.

    Deseo crear una nueva variable on nombre “USUARIO” donde coloque usuario_1 (todos los 1001), usuarios_2(todos los 1002), etc.

    utilizo el siguiente script:
    mutate(bd, Usuario = row_number(autor)

    y me enumera en orden, dejándome 4 usuarios (1001), cuando en realidad es uno solo.

    Agradezco tu colaboración.

Responder a reynaldo Cancelar la respuesta