[R-es] unir en .dbf luego de aplicar read.xls a varios archivos
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