2016-08-24

Crear una nueva columna incremental basándonos en otra en R

Title

Problema

Partimos del siguiente data frame:

  Name Grade
1 John     C
2 John    C+
3 John     C
4 John     B
5 John     A
6 John    A+
7  Kat     B
8  Kat     C
9  Kat     B

Queremos añadir una nueva columna, months, que comience con 3 y continúe con sus múltiplos.

  • Datos originales
  • df <- structure(list(Name = c("John", "John", "John", "John", "John", 
    "John", "Kat", "Kat", "Kat"), Grade = c("C", "C+", "C", "B", 
    "A", "A+", "B", "C", "B")), .Names = c("Name", "Grade"), class = "data.frame", row.names = c(NA, 
    -9L))
    

    Solución

    • Paquete base
    • Usando seq con ave, y 1:nrow(df) en lugar de ff$Name para evitar un vector de tipo carácter como resultado.

      df$months <- ave(1:nrow(df), df$Name, FUN = seq)*3
      
       Name Grade months
      1 John     C      3
      2 John    C+      6
      3 John     C      9
      4 John     B     12
      5 John     A     15
      6 John    A+     18
      7  Kat     B      3
      8  Kat     C      6
      9  Kat     B      9
      
    • dplyr
    • library(dplyr)
      df %>% group_by(Name) %>% mutate(Months=3*seq(n()))
      
    • data.table
    • library(data.table)
      setDT(df)[, Months := 3* seq_len(.N) , by = Name]
      

    Referencias

    2016-08-22

    Trucos para el VBE: Ir a la definición de la subrutina o función

    Title

    Problema

    Es frecuente que dentro de un módulo o proyecto queramos acudir a otra función o subrutina a la que llamamos dentro de otra. Por ejemplo en el siguiente ejemplo llamamos a la subrutina Otra_Macro.

    Solución

      Para ir a la función o subrutina

    • Clic en el nombre de la subrutina o función deseada, menú Ver y clic en Definición.
    • O clic en la función o subrutina y presionamos Mayús + F2
      Para volver a la posición previa:

    • Mayús + Control + F2 o mediante el menú Ver y clic en Última posición.

    Notas

    Como se ve en la imagen y mencionamos anteriormente, es necesario situar el cursos al comienzo o dentro del nombre de la subrutina o función a la que deseamos acudir. De lo contrario nos aparecerá el mensaje de error: "El identificador que está bajo el cursor no está reconocido". Al presionar Mayús + Control + F2 nos lleva a la línea de la última posición pero no al nombre de la función o subrutina. Por lo que será necesario, si hemos usado la palabra Call (Opcional), situar de nuevo el cursor en el nombre.

    Entradas relacionadas

    2016-08-20

    Trucos para el VBE: Navegar entre módulos y subrutinas

    Title

    Navegación entre módulos

  • Control + Tabulador nos permite movernos entre los módulos
  • Navegación entre subrutinas

  • Control + Av Pág o Control + Flecha abajo - Nos sitúa en la próxima subrutina.
  • Control + Re Pág o Control + Flecha arriba- Nos sitúa en la anterior subrutina.
  • A continuación se puede apreciar como el cursor pasa de una subrutina a la siguiente o a la anterior.

    Entradas relacionadas

    2016-08-12

    ggplot2 stat_smooth: cambiar el aspecto de los intervalos de confianza

    Title

    Problema

    Queremos cambiar el aspecto de los intervalos de confianza (todos son grises) para cada una de las especies del siguiente gráfico.

    library(ggplot2)
    ggplot(iris, aes(x = Sepal.Length, y = Petal.Length, color = Species, linetype = Species)) + stat_smooth(method = "loess")
    

    Solución

    Dentro de stat_smooth añadimos aes(fill = Species). Así asigna un color diferente a cada intervalo de confianza. Establezco en size el 2 para que se pueda apreciar mejor la diferencia de las líneas para cada especie..

    ggplot(iris, aes(x = Sepal.Length, y = Petal.Length, color = Species, linetype = Species)) + stat_smooth(method = "loess", aes(fill = Species), size = 2)
    

    Referencias

    2016-08-06

    BUSCARV con números formateados como texto

    Title

    Problema

    En Excel si tratamos de buscar valores formateados como números en una tabla con números formateados como texto o viceversa obtendremos un error.

    Solución

    • Valor buscado número en una matriz tabla como texto.
    • Con esta primera opción al concatenar al número una cadena de texto vacía lo convertimos en texto.

      =BUSCARV(A2&"";$B$2:$B$6;1;0)

      Con esta segunda opción utilizamos una fórmula matricial ( Ctrl+Mayús+Entrar) para forzar la conversión de la matriz tabla en números con la función VALOR.

      {=BUSCARV(A2;VALOR($B$2:$B$6);1;0)}

      Se puede observar como en la primera columna los números están alienados a la izquierda, lo que indica que Excel los interpreta como texto al haber concatenado una cadena de texto en la búsqueda. En la segunda columna en cambio Excel sí que reconoce los números como tales.

    • Valor buscado texto en una matriz tabla como número.
    • Con la primera opción forzamos la conversión del valor buscado de texto a número al multiplicarlo por 1.

      =BUSCARV(1*B2;$A$2:$A$6;1;0)

      Con la segunda y tercera opciones utilizamos una fórmula matricial para forzar la conversión de la matriz tabla en texto concatenando una columna vacía o mediante la función TEXTO.

      {=BUSCARV(B2;B2:B6&"";1;0)}

      {=BUSCARV(B2;TEXTO($A$2:$A$6;"@");1;0)}

      Se observa como antes que Excel alineará los números a la derecha y la izquierda el texto.

  • Transformar la columna correspondiente a texto o número
  • Aplicando las fórmulas anteriores: multiplicando por 1, o bien concatenando una cadena de texto vacía.

    Entradas relacionadas

    Nube de datos