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