[R-es] unir en .dbf luego de aplicar read.xls a varios archivos

Sebastian Kruk residuo.solow en gmail.com
Vie Ene 13 13:21:32 CET 2012


Hola Jorge. Lamentablemte no funcionó. Cambié worksheet = 1 por
worksheet = "Hoja1". Las columnas con datos numéricos las importa
vacías la función FromExcel.

Te paso:

> str(a1)
'data.frame':   58 obs. of  7 variables:
 $ V1: chr  "101" "Código" "111" "119" ...
 $ V2: chr  "BARRACA MAIN                                    "
"Material" "Alambre negro N° 14
                                                            " "Arena
gruesa
                                          " ...
 $ V3: chr  "" "Unidad" "kg                  " "m3                  " ...
 $ V4: chr  "Precio en $" "DICIEMBRE" "62.45" "545.76" ...
 $ V5: chr  "Precio en $" "ENERO" "" "" ...
 $ V6: chr  "Variación" "DIC-ENE" "-100" "-100" ...
 $ V7: chr  "2012-01-01 " "Observaciones " " " " " ...

> str(a2)
'data.frame':   21 obs. of  7 variables:
 $ V1: chr  "309" "Código" "701" "702" ...
 $ V2: chr  "CSA                                         " "Material"
"Vidrio plano de 3mm. colocado
                                    " "Vidrio plano de 4 mm. colocado

 " ...
 $ V3: chr  "" "Unidad" "m2" "m2" ...
 $ V4: chr  "Precio en $" "DICIEMBRE" "649" "811" ...
 $ V5: chr  "Precio en $" "ENERO" "" "" ...
 $ V6: chr  "Variación" "DIC-ENE" "-100" "-100" ...
 $ V7: chr  "2012-01-01 " "Observaciones " " " " " ...

> str(archivos)
 chr [1:2] "N° 101 - BARRACA MAIN.xls" "N° 309 - CSA.xls"

Esta versión me anda pero tengo que tener instalado Perl:


archivos <- list.files(pattern = 'xls')

library(gdata)
informacion <- lapply(archivos, read.xls,

perl="C:\\strawberry\\perl\\bin\\perl.exe",skip=12,dec=",",header=F,as.is=T)

res <- lapply(informacion, function(x){
       cbind(x[1, 1:2], x[4:which(x == "Art. 14") - 1, 1:7])
})
out <- do.call(rbind, res)

El día 10 de enero de 2012 13:50, Jorge I Velez
<jorgeivanvelez en gmail.com> escribió:
> Hola Sebastian,
>
> No tengo Windows a la mano, pero podrias intentar con RODBC (que no usa
> Perl):
>
> # para leer archivos de Excel usando RODBC
> require(RODBC)  # instalar primero
> FromExcel <- function(yourfile, worksheet){
> channel <- odbcConnectExcel(yourfile)
> mydata <- sqlFetch(channel, worksheet)
> odbcClose(channel)
> mydata
> }
>
> archivos <- list.files(pattern = 'xls')
> info <- lapply(archivos, FromExcel, worksheet = 1)  # asumiendo que la
> primera hoja tiene la info
> res <- lapply(info, function(x){
> y <- x[-c(1:12),]  # este es el "skip" que haces
> cbind(y[1, 1:2], y[4:which(y == "Art. 14") - 1, 1:7])  # el resto
> })
> out <- do.call(rbind, res)
> out
>
> Si no funciona, podrias por favor enviarnos el resultado de str(a1) y
> str(archivos), asi como el comando lapply(...) que usaste?
>
> Un saludo,
> Jorge.-
>
>
> 2012/1/10 Sebastian Kruk <>
>>
>> Estimados:
>>
>> Tengo un directorio con varios archivos Excel quiero importarlos todos
>> y grabarlos en un único archivo .dbf.
>>
>> Haciendolo uno por uno lo logro de la siguiente manera (solo tomo 2
>> archivos):
>>
>> archivos <- list.files(pattern = 'xls')
>>
>> a1 <- read.xls(archivos[1],
>>
>> perl="C:\\strawberry\\perl\\bin\\perl.exe",skip=12,dec=",",header=F,as.is=T)
>> a2 <- read.xls(archivos[2],
>>
>> perl="C:\\strawberry\\perl\\bin\\perl.exe",skip=12,dec=",",header=F,as.is=T)
>>
>> a11 <- cbind(a1[1,1:2],a1[4:which(a1=="Art. 14")-1,1:7])
>> a21 <- cbind(a2[1,1:2],a1[4:which(a1=="Art. 14")-1,1:7])
>>
>> a3 <- rbind(a11,a21)
>>
>> Si lo hago con lapply me queda mal.
>>
>> Saludos,
>>
>> Sebastián.
>>
>> _______________________________________________
>> R-help-es mailing list
>> R-help-es en r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
>



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