2012-08-15 12 views
7

Soy un principiante de R y me preguntaba cómo importar datos de Excel en R usando nombres de filas y columnas. Específicamente, necesito un subconjunto de los datos en una cantidad de hoja de trabajo dentro de un archivo de Excel. ¿Puedo usar nombres de filas y columnas para identificar y extraer ciertas celdas de datos a R?Cómo importar datos de Excel a R usando el nombre de la columna y el nombre de la fila

Worksheet 1 
---------- 
* X Y Z 
A 1 2 2 
B 1 1 1 
C 1 3 4 
D 4 2 2 
E 2 2 2 
---------- 
Worksheet 2 
---------- 
* X Y1 Z1 
A 1 2 2 
B 1 2 3 
C 1 3 4 
D 4 1 1 
E 2 1 1 

Por ejemplo, en la hoja de cálculo arriba ¿Cómo podría extraer los datos (2,2,2,2) utilizando los nombres de fila y columna (D, Y) (D, Z) (E, Y) (E, Z) en la hoja de trabajo 1

cómo podría extraer los datos (1,1,1,1) usando los nombres de fila y columna (D, Y1) (D, Z1) (E, Y1) (E , Z1) en la hoja de trabajo 2?

Gracias por cualquier ayuda siempre

Barry

+0

¿Necesita importar solo un subconjunto en R o está bien importar todo y subconjunto en R? – themel

Respuesta

2

Hay varios paquetes que proporcionan funciones para importar datos de Excel a R; ver la documentación R data import/export.

He encontrado que el paquete xlsx es útil (leerá los archivos .xls y .xlsx). No creo que acepte nombres de fila/columna como entrada, pero aceptará su valor numérico (fila 1, columna 4, por ejemplo). En su caso, algo como esto debería funcionar, en el supuesto de que X, Y y Z corresponden a las columnas 1-3:

library(xlsx) 
# first example subset; call it ss1 
# assume first row is not a header; otherwise requires header = T 
ss1 <- read.xlsx("myfile.xlsx", sheetIndex = 1, rowIndex = 4:5, colIndex = 2:3) 

# second example subset; call it ss2 
# just the same except worksheet index = 2 
ss2 <- read.xlsx("myfile.xlsx", sheetIndex = 2, rowIndex = 4:5, colIndex = 2:3) 

Sin embargo, tendrá que experimentar con su propio archivo hasta que las cosas funcionan como se esperaba. También puede especificar sheetName pero me parece que sheetIndex normalmente funciona de manera más fiable, una vez que se descifra el índice correcto para cada hoja. Y ten cuidado si la primera fila es un encabezado.

Habiendo dicho todo eso: mi opción preferida sería exportar la hoja a un formato de texto como CSV, usar herramientas de shell (cortar, cabeza, cola etc.) para obtener las filas/columnas necesarias e importarlas a R.

+1

Te recomiendo que deshagas 'xlsx' y usas' XLConnect' en su lugar. Utiliza las mismas bibliotecas de Java para manipular Excel, pero es 'Inf' más fácil de usar. – Andrie

+0

Muchas gracias por todos sus comentarios muy útiles – barryq

8

@Andrie mencionó el paquete XLConnect, es un paquete muy útil para E/S entre R y Excel con la posibilidad de seleccionar región en hoja de Excel.

Creé un archivo de Excel como el suyo en mi carpeta pública de Dropbox, puede descargar el archivo example.xls .

require(XLConnect) 

## A5:C5 correspond to (D,Y) (D,Z) (E,Y) (E,Z) in your example 
selectworksheet1 <- readWorksheetFromFile("/home/ahmadou/Dropbox/Public/example.xls", 
           sheet = "Worksheet1", 
           region = "A5:C5", header = FALSE) 

selectworksheet1 
## Col0 Col1 Col2 
## 1 2 2 2 


## B4:C5 correspond to (D,Y1) (D,Z1) (E,Y1) (E,Z1) in the second example 
selectworksheet2 <- readWorksheetFromFile("/home/ahmadou/Dropbox/Public/example.xls", 
         sheet = "Worksheet2", 
         region = "B4:C5", header = FALSE) 

selectworksheet2 
## Col0 Col1 
## 1 1 1 
## 2 1 1 

unlist(selectworksheet2) 
## Col01 Col02 Col11 Col12 
## 1  1  1  1 
Cuestiones relacionadas