dplyr

dplyr parece que prefiere los factores

r
Con datos bajados de aquí: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 library(MicroDatosEs) library(dplyr) library(microbenchmark) library(ggplot2) censo <- censo2010("MicrodatosCP_NV_per_nacional_3VAR.txt") censo_char <- as.data.frame(censo[, c("CPRO", "SEXO", "ECIVIL", "FACTOR")]) censo_factor <- censo_char censo_factor$CPRO <- factor(censo_factor$CPRO) foo <- function(x) x %>% group_by(CPRO) %>% summarise(res = sum((SEXO == "Mujer") * (ECIVIL == "Divorciado") * FACTOR) / sum(FACTOR) * 100) res <- microbenchmark( char = foo(censo_char), factor = foo(censo_factor), times = 10 ) autoplot(res) Da:

¿Soy un dinosauRio? Sobre las novedades de R

r
Trato de estar abierto a lo nuevo. Tantos años soportando dinosaurios me han vacunado contra el conservadurismo tecnológico. De hecho, me produce arcadas. La experiencia, no obstante, me ha hecho permeable al efecto Lindy, lo que me da ocasión de saludar a mis amigos emaqueros. Las cosas cambian y en R estamos viviendo una especie de revolución. Mi argumento, para impacientes, es que: Es más superficial que sustancial: es azúcar sintáctico.

Dos nuevos tutoriales sobre data.table y dplyr

r
Los productos de Apple, aun admitiendo su calidad, resuelven problemas que yo hace años que no tenía. Tanto data.table como dplyr vinieron a resolver problemas a los que muchos nos enfrentábamos con sudor y lágrimas. Ha aparecido recientemente una serie de tutoriales sobre ambos paquetes que recomiendo: El de data.table El de dplyr (parte I, parte II) Y mis comentarios: Para el 99% de mis problemas de manipulación de datos, me sobra con, además de R base, reshape2 y plyr.

¿Cuál es la "mejor" manera de ordenar un dataframe?

r
El título de esta entrada es una pregunta honesta. Yo siempre he utilizado order así: 1 iris[order(iris$Petal.Length),] Y para ordenar por dos (o más columnas), así: 1 iris[order(iris$Petal.Length, iris$Petal.Width),] Es a lo que estoy acostumbrado. Sin embargo, la construcción anterior desconcierta a quienes dan sus primeros pasos en R. dplyr dispone de la función arrange con una sintaxis un tanto más natural: 1 2 library(dplyr) arrange(iris, Petal.

Huele a bicho (en plyr)

r
1 2 3 4 5 6 7 library(plyr) dat <- data.frame( a = sample(c("x", "y"), 100, replace = T), b = sample(c(TRUE, FALSE), 100, replace = T)) ddply(dat, .(a), summarize, b = sum(b), no.b = sum(!b)) ddply(dat, .(a), summarize, no.b = sum(!b), b = sum(b)) Huele a bicho, ¿verdad?

plyr, dplyr, data.table: ¿qué opinas?

r
Fui un pájaro mañanero con [plyr](http://cran.r-project.org/web/packages/plyr/index.html). Probé una vez [data.table](http://cran.r-project.org/web/packages/data.table/index.html) y no me convenció. Volví a él cuando realmente lo necesitaba y ahora es la prolongación de mis dedos. Aún no me he puesto con [dplyr](http://cran.r-project.org/web/packages/dplyr/index.html) aunque he visto el suficiente código escrito con él que no creo que me cueste mucho comenzar a usarlo. Pero tengo la sensación de que tenemos un cisma como el de vi contra emacs en ciernes.

Totales agregados por bloques en tablas

r
En ocasiones uno quiere añadir un total calculado en ciertos bloques a una tabla. Por ejemplo, en la tabla 1 2 3 4 5 set.seed(1234) ventas.orig <- data.frame( cliente = rep(1:10, each = 5), producto = rep(letters[1:5], times = 10), importe = rlnorm(50)) tenemos clientes, productos e importes. Y nos preguntamos por el porcentaje en términos de importe que cada producto supone para cada cliente. Una manera natural pero torpe de realizar este cálculo consiste en usar un objeto intermedio y merge: