Trucos simples para #rstats

11 Feb

En mi cuenta de twitter suelo poner algunos trucos sencillos de R, cosas que me surgen cuando estoy trabajando y que no me cuesta compartir en 2 minutos, por si puedo ayudar a alguien. Me acabo de dar cuenta que de verdad son útiles y que tenerlos en twitter desperdigados es un problema, así que he pensado en recopilarlos en una entrada del blog para que sea más sencillo buscarlos (incluso para mi). Aquí van algunos de esos trucos:

Pasar los datos de un data frame al portapapeles, útil cuando quieres mover datos de R a Excel sin complicaciones:

write.table(borra,"clipboard", sep="\t", dec=",", row.names = F)

Pasar el nombre de los campos de un data frame al clipboard (hila con el anterior), útil cuando trabajas con un editor de texto o alguna hoja de cálculo para automatizar código:

write.table(colnames(DF),"clipboard", sep="\t", dec=",", row.names = F)

Poner formato 00000 propio códigos postales:

cp <- c(8080,29001)
cp <- sprintf("%05d", cp)

El mejor subset para H2O:

df.hex[df.hex$campo > 0,]

Texto a fecha en R:

dffecha= as.Date (dffecha, "%d/%m/%Y")

Identificar registros repetidos en un data frame, crea un data frame con los registros duplicados en una línea de código de dplyr:

repetidos <- df %>% group_by(campo_ID) %>%
 summarise(repetido = n()) %>% filter(repetido>1)

Mi preferida y el motivo de la entrada, tramificar una variable cuantitativa en n grupos:

grupos = 10
df <- df %>% arrange(campo) %>% 
mutate(campo_tramos= as.factor(ceiling((row_number()/n())*grupos)))

Transformar nulos a 0 en 20 caracteres:

df[is.na(df$V1)] <- 0

Transformar números separados por coma en formato texto a formato numérico:

dfnumero <- as.numeric(sub(",",".",dftexto))

Todos los factores de mi data frame de R a carácter para evitar algún lío, uso de lapply:

df <- data.frame(lapply(df, as.character), stringsAsFactors=FALSE)

Crear una secuencia de fechas en R y dar formato a la secuencia de fechas en R:

nombres <- seq(as.Date("1985/5/1"), as.Date("2019/7/1"), "month")
nombres <- format(nombres, format='%b%y')
nombres <- c("Problema",nombres)

Función para quedarnos sólo los números por los que comienza una cadena de textos de una cadena de textos en R:

solo_numeros <- function(x){
  as.numeric(gsub("([0-9]+).*$", "\\1", x))
}

Uso de tidyr para extraer de un string sólo los números. Ojo que hay ocasiones en las que es necesario tener talento para hacer esta tarea:

library(tidyr)
vehxKmRamales = extract_numeric(vehxKmRamales)

Función para exportar al portapapeles dataframes de mayor tamaño, ideal para mover dataframes a Excel pasando de formato americano a formato europeo:

export <- function(df){
  write.table(df, file="clipboard-16384",sep="\t", row.names = F,dec=",")
}

Secuencia de fechas con R:

dia <- seq(as.Date("2020/04/27"), as.Date("2020/05/31"), "days")
feriados <- c(as.Date("2020-05-01"))

Función para quedarnos solo con números dentro de una cadena de textos en R, hay muchas, yo uso esta:

quita_letras <- function(x){
  as.numeric(gsub("([0-9]+).*$", "\\1", sub('.*-([0-9]+).*','\\1',x)))  }

El not in en R:

`%notin%` = Negate(`%in%`)

Permitir a RStudio sacar todas las columnas del data frame:

rstudioapi::writeRStudioPreference("data_viewer_max_columns", 500L)

Reemplaza una variable con un valor nulo a un 0 con el ifelse:

reemplaza <- function(varib){
  ifelse(is.na(varib), 0 , varib)
}

Operar con meses en formato YYYYMM, los típicos de las particiones, un truco que es probable que exista:

opera_mes <- function(m, num){
  year(ymd(m*100+1) %m+% months(num))*100+month(ymd(m*100+1) %m+% months(num))
}

opera_mes(200201,24)

Espero que esta entrada pueda seguir creciendo, son tonterías (mis tonterías) y las tengo centralizadas en una sola entrada.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *