2017-12-14

Renombrar columnas duplicadas al unir dos tablas con dplyr

Title

Problema

Cuando unimos dos tablas con dplyr, las columnas duplicadas de la primera tabla recibirán por defecto el sufijo .x y las de la segunda tabla el sufijo .y. En el siguiente ejemplo, las columnas mpg.x y mpg.y. ¿Cómo podemos modificar esos sufijos?

library("dplyr") 
left_join(mtcars, mtcars[, c("mpg", 'cyl')], by = c("cyl")) %>% head()
  mpg.x cyl disp  hp drat   wt  qsec vs am gear carb mpg.y
1    21   6  160 110  3.9 2.62 16.46  0  1    4    4  21.0
2    21   6  160 110  3.9 2.62 16.46  0  1    4    4  21.0
3    21   6  160 110  3.9 2.62 16.46  0  1    4    4  21.4
4    21   6  160 110  3.9 2.62 16.46  0  1    4    4  18.1
5    21   6  160 110  3.9 2.62 16.46  0  1    4    4  19.2
6    21   6  160 110  3.9 2.62 16.46  0  1    4    4  17.8

Solución

Empleamos el argumento suffix, suministrando un vector de longitud 2 para las dos tablas unidas. En nuestro ejemplo, nombramos las columnas mpg_original (sufijo _original) y mpg_new (sufijo _new).

left_join(mtcars, mtcars[,c("mpg","cyl")], 
              by = c("cyl"), 
              suffix = c("_original", "_new")) %>% head()
  • Datos
  • mpg_original cyl disp  hp drat   wt  qsec vs am gear carb mpg_new
    1           21   6  160 110  3.9 2.62 16.46  0  1    4    4    21.0
    2           21   6  160 110  3.9 2.62 16.46  0  1    4    4    21.0
    3           21   6  160 110  3.9 2.62 16.46  0  1    4    4    21.4
    4           21   6  160 110  3.9 2.62 16.46  0  1    4    4    18.1
    5           21   6  160 110  3.9 2.62 16.46  0  1    4    4    19.2
    6           21   6  160 110  3.9 2.62 16.46  0  1    4    4    17.8
    

    Referencias

    2017-12-12

    Abrir ficheros de texto en Excel arrastrándolos y soltándolos

    Title

    Problema

    Deseamos abrir rápidamente un fichero de texto (csv o txt), sin necesidad de importarlo desde la pestaña de Datos.

    Solución

    Simplemente arrastramos el fichero y lo soltamos sobre cualquier fichero Excel abierto o el icono de Excel en la barra de tareas. Excel creará automáticamente otro libro temporal con el contenido del fichero de texto.

    Si la extensión del fichero está vinculada a Excel también podemos hacer doble clic sobre el mismo. También si no está vinculado podremos elegir Excel en Abrir con, si lo hemos hecho anteriormente.Si no lo está, es una opción muy rápida para abrirlo.

    Entradas relacionadas

    2017-12-10

    Ampliar el número de libros recientes mostrados en Excel

    Title

    Problema

    Libros recientes en Excel lista por defecto los últimos 25 libros abiertos con Excel. Para acceder al listado, abrimos Excel y hacemos clic an Abrir otro Libros; o bien desde cualquier libro, clic en la Archivo y seleccionamos Abrir. ¿Qué debemos hacer si queremos modificar el número de libros recientes listados?

    Solución

    Inicio, Opciones de Excel, Avanzadas y descendemos hasta la sección Mostrar, donde seleccionaremos el número deseado (50 como máxismo).

    Entradas relacionadas

    2017-11-26

    Diagrama de barras en ggplot - Preservar orden del data frame

    Title

    Problema

    Cuando creamos un diagrama de barras, ggplot2 por defecto el eje x en orden alfabético, de manera que en el gráfico aparecen desordenadas las categoría.

    library("ggplot2") 
    ggplot(df, aes(x = palabra, y= contar, fill = categoria)) + geom_bar(stat = "identity")
    
  • Datos
  •  palabras contar categoria palabra
    1       BI  67452    Defect      BI
    2       Bu  47279    Defect      Bu
    3       Re  38530    Defect      Re
    4      dvd   2554    Defect     dvd
    5    Techn  34044  Digitaal   Techn
    6   Retour  12190  Digitaal  Retour
    7  Digital  22102  Digitaal Digital
    8     Kobo   1234  Digitaal    Kobo
    
    # Data frame
    df <- structure(list(palabras = structure(c(1L, 2L, 6L, 4L, 8L, 7L, 
    3L, 5L), .Label = c("BI", "Bu", "Digital", "dvd", "Kobo", "Re", 
    "Retour", "Techn"), class = "factor"), contar = c(67452, 47279, 
    38530, 2554, 34044, 12190, 22102, 1234), categoria = structure(c(1L, 
    1L, 1L, 1L, 2L, 2L, 2L, 2L), .Label = c("Defect", "Digitaal"), class = "factor")), .Names = c("palabras", 
    "contar", "categoria"), row.names = c(NA, -8L), class = "data.frame")
    

    Solución

    Ordenamos el factor palabra conforme al orden en el que aparecen en el data frame.

    df$palabra <- factor(df$palabra, levels = df$palabra)
    ggplot(df, aes(x = palabra, y= contar, fill = categoria)) + geom_bar(stat = "identity")
    

    Referencias

    2017-11-16

    Cambiar el color y añadir leyenda en un diagrama de barras por subgrupos en ggplot2

    Title

    Problema

    Cuando creamos un diagrama de barras por subgrupos (facet_grid), aunque especifiquemos color para el eje x, ggplot2 crea un gráfico monocromático, sin cambiar el color de cada columna.

    library("ggplot2")    
    ggplot(data = diamonds) + 
          geom_bar(mapping = aes(x = color, y = ..prop.., group = 2)) + 
          scale_y_continuous(labels=scales::percent) +
          facet_grid(~cut)
    

    Solución

    Al calcular la proporción por grupo, necesitamos especificar en una aesthetics (aes) diferente el color para alterar el comportamiento por defecto de ggplot2. Una dentro de la función ggplot y otra dentro de geom_bar con fill.

    ggplot(data = diamonds, aes(x = color, y = ..prop.., group = cut)) + 
      geom_bar(aes(fill = factor(..x.., labels = LETTERS[seq(from = 4, to = 10 )]))) + 
      labs(fill = "color") + 
      scale_y_continuous(labels = scales::percent) + 
      facet_grid(~ cut)
    

    Referencias

    2017-10-16

    Eliminar columnas con nombres duplicados de un data frame en R

    Title

    Problema

    Queremos eliminar las columnas con nombres duplicados de un data frame en R.

    df <- data.frame(a = 1:2, b = 1:2, 
                     c = 1:2, a = 2:3, 
                     a = 2:3, b = 2:3, 
                     check.names = F)
    
      a b c a a b
    1 1 1 1 2 2 2
    2 2 2 2 3 3 3
    

    Solución

    • Base
    • df[, !duplicated(df)] # o bien
      df[, unique(df)]
      
       a b c
      1 1 1 1
      2 2 2 2
      
    • dplyr
    • Empleamos funciones del paquete base pero evitamos los corchetes para hacerla más legible.

      library(dplyr)
      df %>% subset(select = !duplicated(names(.))) # o bien
      df %>% subset(select = unique(names(.)))
      

    2017-10-14

    Comprobar si una celda contiene un hipervínculo


    Title

    Problema

    Necesitamos comprobar mediante una fórmula si unas celdas contienen un hipervínculo.

    Solución

    1. Abrimos el Editor de Microsoft Visual Basic: Alt+F11.
    2. Creamos la siguiente función en un módulo.
      • Function ESHIPERVINCULO(r As Range) As Boolean
          ESHIPERVINCULO = r.Hyperlinks.Count
        End Function
        
    3. Usamos la función recién creada ESHIPERVINCULO en cualquier celda.
    Es importante recalcar que la fórmula nos indica si hay un hipervínculo, no si éste es válido.

    Entradas relacionadas

    Referencias

    2017-09-25

    Mínimo común múltiplo y máximo común divisor en R

    Title

    Problema

    Deseamos calcular el mínimo común múltiplo y el máximo común divisor de un vector en R.

    Solución

    Usamos el paquete numbers. Las funciones mLCM(x) y mGCD(x) computan el mínimo común múltiplo y el máximo común divisor de todos los números de un vector x de números enteros:

    library(numbers)
        mGCD(c(4, 8, 12, 16, 20))
    [1] 4
        mLCM(c(8,9,21))
    [1] 504
        # Sequences
        mLCM(1:20)
    [1] 232792560
    

    Referencias

    Nube de datos