2016-04-03

Cómo crear un histograma a partir de múltiples columnas en R

Title

Problema

Tenemos un data frame con múltiples columnas —en nuestro ejemplo 49— y deseamos utilizar todas las columnas como una única variable. También calcularemos la media de todas las columnas.

df <- read.table(textConnection("1.52 0.39 1.30 1.10 0.82 0.59 1.11 0.44 0.70 0.57 0.65 1.06 0.55 0.34 1.09 0.46 0.43 0.99 0.41 1.04 1.25 0.75 0.54 0.62 0.56 0.58 0.85 0.38 0.66 0.83 1.00 0.56 0.66 0.40 1.44 1.28 0.58 1.05 0.64 0.54 0.52 1.28 0.51 0.64 0.82 0.45 0.83 0.58 0.51"), header = FALSE)
    V1   V2  V3  V4   V5   V6   V7   V8  V9  V10  V11  V12  V13  V14  V15  V16  V17  V18  V19  V20  V21  V22  V23  V24  V25  V26  V27  V28
1 1.52 0.39 1.3 1.1 0.82 0.59 1.11 0.44 0.7 0.57 0.65 1.06 0.55 0.34 1.09 0.46 0.43 0.99 0.41 1.04 1.25 0.75 0.54 0.62 0.56 0.58 0.85 0.38
   V29  V30 V31  V32  V33 V34  V35  V36  V37  V38  V39  V40  V41  V42  V43  V44  V45  V46  V47  V48  V49
1 0.66 0.83   1 0.56 0.66 0.4 1.44 1.28 0.58 1.05 0.64 0.54 0.52 1.28 0.51 0.64 0.82 0.45 0.83 0.58 0.51

Solución

  • Histograma
  • Simplemente transponemos el data frame antes de crear el histograma.

    hist(t(df))
    

  • Calculamos la media
  • Tenemos dos alternativas: mean o rowMeans.

    mean(t(df)) # or 
    rowMeans(df)
    

    [1] 0.752449 
    

    Entradas relacionadas

    Referencias

    2016-03-28

    Agrupar datos en tablas dinámicas con intervalos personalizados

    Title

    Problema

    Tenemos una tabla dinámica y deseamos crear agrupar los datos con intervalos personalizados. En nuestro ejemplo queremos crear intervalos de 10 años para el siguiente rango.

    Solución

    1. Creamos una tabla dinámica. En etiquetas de fila Edad y en valores Cuenta de edad.
    2. Agrupamos las etiquetas de fila. Clic con el botón secundario del ratón en cualquiera de las etiquetas de fila y clic en Agrupar.
    3. En el desplegable Agrupar, escribimos el inicio, el final y la amplitud del intervalo. En nuestro ejemplo 0, 100 y 10 años.

    Resultado final

    2016-03-19

    Eliminar de un data frame aquellas filas duplicadas en otro data frame

    Title

    Problema

    Queremos seleccionar las filas de A que no están presentes en in B. El resultado esperado es el data frame C.

    A <- structure(list(Var1 = c(1L, 2L, 4L, 4L, 6L), Var2 = c(3L, 5L, 
    5L, 5L, 7L), Var3 = c(4L, 6L, 7L, 8L, 9L)), .Names = c("Var1", 
    "Var2", "Var3"), class = "data.frame", row.names = c(NA, -5L))
    B <- structure(list(Var1 = 1:2, Var2 = c(3L, 5L), Var3 = c(4L, 6L)), .Names = c("Var1", "Var2", "Var3"), class = "data.frame", row.names = c(NA, -2L))
    
    # A
      Var1 Var2 Var3
    1    1    3    4
    2    2    5    6
    3    4    5    7
    4    4    5    8
    5    6    7    9
    
    # B
      Var1 Var2 Var3
    1    1    3    4
    2    2    5    6
    

  • Resultado esperado
  • # C
      Var1 Var2 Var3
    3    4    5    7
    4    4    5    8
    5    6    7    9
    

    Solución

  • Paquete base R
  • C <- rbind(A, B)
    C[!(duplicated(C) | duplicated(C, fromLast = TRUE)), ]
    

  • dplyr
  • library(dplyr)
    anti_join(A, B)
    

  • sqldf
  • library(sqldf)
    C <- sqldf('SELECT * FROM A EXCEPT SELECT * FROM B')
    

  • data.table
  • library(data.table)
    setDT(df1)[!df2, on = names(df1)]
    

    Entradas relacionadas

    Referencias

    2016-03-12

    Calcular el mínimo y la mediana de cada fila en R

    Title

    Problema

    Queremos añadir al siguiente data frame dos columnas con el mínimo y la mediana de cada fila.

    df <- structure(list(V1 = c(5L, 4L, 7L), V2 = c(8L, 9L, 3L), V3 = c(12L, 
    5L, 9L)), .Names = c("V1", "V2", "V3"), class = "data.frame", row.names = c(NA, 
    -3L))
    
     V1 V2 V3
    1  5  8 12
    2  4  9  5
    3  7  3  9
    

    Solución

  • dplyr
  • library(dplyr)
    # Usando el operador %>%
    df %>% 
      rowwise() %>% 
      mutate(min= min(V1, V2, V3), median = median(c(V1, V2, V3)))
    # Sin el operador %>%
    mutate(rowwise(df), min = min(V1, V2, V3), median = median(c(V1, V2, V3)))
    

    Source: local data frame [3 x 5]
    Groups: 
    
         V1    V2    V3   min median
      (int) (int) (int) (int)  (int)
    1     5     8    12     5      8
    2     4     9     5     4      5
    3     7     3     9     3      7
    
  • Paquete base R
  • df$min <- apply(df, 1, min) df$median <- apply(df[, 1:3], 1, median)

      V1 V2 V3 min median
    1  5  8 12   5      8
    2  4  9  5   4      5
    3  7  3  9   3      7
    

    Entradas relacionadas

    Referencias

    2016-03-10

    Cómo usar BUSCARV y SUMAR conjuntamente en Excel

    Title

    Problema

    Tenemos el siguiente rango de datos y queremos devolver la suma de varios meses.

    Soluciones

    • Utilizamos BUSCARV como fórmula matricial. En el indicador de columnas en lugar de especificar una única columna, especificamos entre corchetes el número de columnas deseado. Por ejemplo, enero, febrero, abril y diciembre {2;3;5;13}.
    • Anidamos BUSCARV dentro de SUMA y presionamos, al ser una fórmula matricial, Ctrl+Mayús+Entrar.
    • {=SUMA(BUSCARV(O2;$A$1:$M$4;{2;3;5;13};0))}
      
    • La fórmula SUMA, sumará la matriz obtenida con BUSCARV —77, 82, 84 y 59— arrojando un resultado de 302.

    Notas

    Además de la función SUMAR, podemos realizar otros cálculos como mínimos, máximos, promedios, etc.

    2016-03-08

    Eliminar los bigotes de un diagrama de caja con R Base Package

    Title

    Problema

    Al crear un diagrama de caja con R Base Package, por defecto representa unos bigotes con una longitud de 1,5 veces el RIC (Rango inter-cuartílico)y dos líneas o remates al final de lo mismoas, que queremos eliminar.

    boxplot(mpg ~ cyl, data = mtcars)
    

    Solución

    Especificamos los argumentos whisklty = 0, staplelty = 0.

    whisklty - determina el tipo de línea, anchura y color de los bigotes.
    staplelty - determina el tipo de línea, anchura y color del final del bigote.

    boxplot(mpg ~ cyl, data = mtcars, whisklty = 0, staplelty = 0)
    

    Entradas relacionadas

    Referencias

    2016-03-06

    Eliminar los bigotes de un diagrama de caja con ggplot2

    Title

    Problema

    Al crear un diagrama de caja con ggplot2, por defecto representa unos bigotes con una longitud de 1,5 veces el RIC (Rango inter-cuartílico), que queremos eliminar.

    library(ggplot2)
    p <- ggplot(mtcars, aes(factor(cyl), mpg))
    p + geom_boxplot()
    

    Solución

    Especificamos el argumento coef = 0, sobrescribiendo el argumento por defecto de coef = 1.5.

    p <- ggplot(mtcars, aes(factor(cyl), mpg))
    p + geom_boxplot(outlier.size = 0, coef = 0)
    

    Entradas relacionadas

    Referencias

    Nube de datos