[R-es] Crear una función

Mauricio Monsalvo m.monsalvo en gmail.com
Mie Mar 15 11:21:13 CET 2017


Hola.
Estoy intentando crear una función pero no logro que termine de cerrar y mi
manejo no permite que el google me ayude...
n.reg.dep <- function(x, y) {
     etiqueta <- str_replace(nombres[Variable == y, Descripcion], "[ ]", "")
     tabla <- datos[, .N, by = .(etiqueta = A3a)] #
     tabla <- tabla[, Porc := round(N/sum(N)*100,1)]   # %
     tabla[, PorcAc := cumsum(Porc)]
          # Regiones
          tabla.1 <- datos[, .N, by = .(etiqueta = x, Region)]
          tabla.1[, Porc := round(N/sum(N)*100,1), by =.(Region)]
          tabla.1 <- spread(tabla.1[, .(etiqueta, Region, Porc)], key =
Region, value = Porc)
     tabla.reg <- left_join(tabla, tabla.1)
          # Depdendencia
          tabla.1 <- datos[, .N, by = .(etiqueta = x, Dependencia = B2a)]
          tabla.1[, Porc := round(N/sum(N)*100,1), by =.(Dependencia)] # %
por Dependencia
          tabla.1 <- na.omit(tabla.1)
          tabla.1 <- spread(tabla.1[, .(etiqueta, Dependencia, Porc)], key
= Dependencia, value = Porc)
     tabla.dep <- left_join(tabla, tabla.1)
     tabla <- left_join(tabla.reg, tabla.dep)
     return(tabla)
}
n.reg.dep(datos$A3a, "A3a")
n.reg.dep(datos$A3a)
​Si bien anda y el resultado es bastante parecido al que espero, no puedo
hacer que las tablas se llamen como quisiera porque el factor "etiqueta"
que debería indicar el primer nombre de la variable no es consdierado, como
podrán ver.
​Si correo el código para la variable, resulta algo como:
> tabla
   Sexo   N Porc PorcAc  NEA  NOA Nacionales Provinciales Municipales
Comunitarios Religiosos Privados
1 Mujer 270 86.8   86.8 92.7 84.2       77.8         89.6        83.8
  78.9         90      100
2 Varon  40 12.9   99.7  7.3 15.3       22.2         10.4        16.2
  19.3         10       NA
3  <NA>   1  0.3  100.0   NA  0.5         NA           NA          NA
    NA         NA       NA​
​Pero como tengo que hacerlo muchas veces, necesitaría poder escribir esta
(mi primera) función. Ahorraría mucho tiempo, además ​de asegurarme que no
pifio en el copiar y pegar y reemplazar.
​Adjunto datos de prueba y una tabla con los las variables y sus
variable.labels (nombres).
​Se usa:
library(data.table)
library(tidyverse) # library(dplyr)
library(stringr)
Muchas gracias.
Saludos.

-- 
Mauricio

	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es