viernes, 31 de julio de 2015

Apuntes sobre R script

NOTA: Esta lista de script se actualiza constantemente


Guardar y leer archivos enformato de R (RDS)
saveRDS(datos_1, file = "C:/Carpeta/datos.rds")
datos    <-   readRDS("C:/Carpeta/datos.rds")


Identificar columnas con Valores Vacios en un DataFrame
VarSinDatos <- apply(Train,2,function(x)  min(nchar(x)))
VarSinDatos <- VarSinDatos[VarSinDatos==0]
print(VarSinDatos)


Leer una base de datos via ODBC
library(RODBC) #Libreria
mi_odbc <- odbcConnect("Miconeccion", uid="MiUsuario", pwd="MiPasword")  #inicio sesion
data <- sqlQuery(mi_odbc, "select campo1, campo2  from  NombreDeTabla") #leer algunos campo
data <- sqlFetch(mi_odbc, "NombreDeTabla") #cargar toda la tabla
OdbcClose(db) #cerrar sesion


Descargar archivo de url a disco
download.file('https://dl.dropboxusercontent.com/u/59930995/cars04.csv', 
'c:/R/prb.csv',  quiet = FALSE, mode = "w",cacheOK = TRUE,
 extra = getOption("download.file.extra"))


Leer csv usando Buscador de Carpetas
DataSet <- read.table(file.choose(),header=TRUE,sep=",")


Pasar un parametro a una lista
do.call("+",list(4,5))


Concatenar muchso CSV en un Data.Frame
setwd("C:/MisArchivosCSV/")  # establece carpeta de trabajo
temp <- list.files(pattern="*.csv") # crea lista con todos los nombres de los csv
DataSet <- do.call("rbind", lapply(temp, function(x) read.csv(x))) # concatena todos los csv


Convertir todas las variables en Factores

DataSet <- as.data.frame(lapply(datos, factor))


Usar la configuración Proxy de InternetExplorer para install.packagge
setInternet2(TRUE) 


Funcion que Carga un Package, si no está instalado, lo instala y luego lo carga
packages <- function(x) {
  x <- as.character(match.call()[[2]])
  if (!require(x,character.only=TRUE)){
    install.packages(pkgs=x,repos="http://cran.r-project.org")
    require(x,character.only=TRUE)
  }
}
packages(rpart)


Transponer una tabla
datos <- data.frame(
  Id_Factura = c(1,1,2,2,2),
  Orden        = c(8,4,8,4,7),
  Item          = c("pan","leche","azucar","maiz","arroz"))
Transaccines <- reshape(datos,
                        direction  =  "wide",
                        timevar    =  "Orden",
                        idvar        =  c("Id_Factura"))


BechMark para medir tiempo ejecucion paralela 
inicio     <- Sys.time();library(snow)  
Cluster   <- makeCluster(4,type="SOCK")
NoPrint  <- clusterEvalQ(Cluster,{library(rbenchmark)})
x            <- clusterApply(Cluster, c(1:10),function(i)      
            {benchmark((1:10^6)^3)})
Sys.time()-inicio


Crear vector como formula con formato Clase ~ var1+var2+var3 
frml <- as.formula(paste("Clase ~ ", #variable Predictora
                        paste(names(within(
                          Train, rm(Clase,Fecha,IdCliente))), #Variables no predictoras 
                              collapse="+") ))


Cambiar el nombre de una columna en un data.frame
names(DATOS)[names(DATOS) == 'nombreviejo']  <-  'nombrenuevo'


Normalizar de cero a uno un data frame
library("scales")
datos     <- data.frame(uno=c(2,4,6,8),dos=c(-2,-4,-6,-8))
datos.nrm <- rescale(datos)


Eliminar registros con valores nulos en una o mas variable
datos              <- data.frame(x1 = c(1,NA,3),
                                                 x2 = c(21,22,23))
datos.complt <- datos[complete.cases(datos),]


Comparar si dos objetos son iguales
uno <-  c(1L, 6L, 10L)
dos <-  c(1, 6, 10)
tres <- c(1, 6, 10)
identical(uno,dos) # FALSE
identical(dos,tres) # TRUE


Selecionar solo variables numéricas en un data.frame
iris.num <- iris[ ,sapply(iris, is.numeric)]


Extraer dominio y correo de EMAIL
gsub(".*@","","enmanuel.s@gmail.com") # gmail.com
gsub("@.*","","enmanuel.s@gmail.com")  # enmanuel.s


Convertir multiples CSV en multiples RDS
lista <- list.files("C:/Archivos/TXT",full.names=T)
for (i in lista){ 
  datos      <- read.csv(i)
  file.name  <- gsub(".csv", ".rds", basename(i)) # arch.csv to arch.rds
  ruta       <- paste('C:/Archivos/RDS/',file.name) # ruta del rds
  saveRDS(datos, ruta) 
  rm(datos,ruta)
}


Completa los valores NA con la media de la variable
df.imp <- sapply(df, function(x) ifelse(is.na(x),mean(x,na.rm = T),x))



Completa/Imputa los valores NA con la moda
x <- c(1,2,3,4,4,4,5,NA,6)
agrupado <- table(as.vector(x))
MODA <- names(agrupado[agrupado==max(agrupado)])
MODA <- as.numeric(MODA)
x_imputado <- ifelse(is.na(x),MODA,x)


Guardar el Summary en un txt
iris_sumary <- summary(iris)
capture.output(iris_sumary, file = "iris_sumary.txt")


Cargar varias librerias/paquetes de forma recursiva usando lapply
libs <- c("rpart", "C50", "randomForest")
lapply(libs,require, character.only= TRUE)



No hay comentarios:

Publicar un comentario