2017-12-12

Abrir ficheros de texto en Excel arrastrando y soltándolos

Title

Problema

Deseamos abrir rápidamente otro fichero de texto (csv o txt), sin necesidad de importarlo desde el menú datos.

Solución

Simplemente arrastramos el fichero y lo soltamos sobre cualquier Excel 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

    2017-08-31

    Eliminar los niveles no usados de un factor en R

    Title

    Problema

    Cuando filtramos un data frame que contiene un factor, y creamos por ejemplo una tabla de contingencia, R nos muestra también aquellos niveles del factor no usados.

    df <- data.frame(name = c("a", "a", "a", "b", "b", "c", "c", "c", "c"), x = 1:9)
    library(dplyr)
    aa <-  df %>%
      group_by(name) %>%
      filter(n() < 4) %>% 
      droplevels()
    table(aa$name)
    
    En este ejemplo muestra c, cuando queremos que muestre solamente a y b.

    # Resultado
    a b c 
    3 2 0
    # Resultado deseado
    a b 
    3 2
    

    Solución

    Usamos la función droplevels o factor.

    table(droplevels(aa$name))
    table(factor(aa$name))
    
    O como estamos empleando el paquete dplyr.

    aa <-  df %>%
      group_by(name) %>%
      filter(n() < 4) %>% 
      droplevels()
    table(aa$name)
    

    Referencias

    Nube de datos