2012-08-15 9 views
7

Sono un principiante e mi chiedevo come importare i dati excel in R usando nomi di righe e nomi di colonne. In particolare, ho bisogno di un sottoinsieme di dati in un certo numero di fogli di lavoro all'interno di un file Excel. Posso usare nomi di righe e nomi di colonne per identificare ed estrarre determinate celle di dati in R?Come importare i dati excel in R utilizzando il nome della colonna e il nome della riga

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 

Ad esempio nel foglio sopra Come avrei estrarre i dati (2,2,2,2) usando i nomi di riga e di colonna (D, Y) (D, Z) (E, Y) (E, Z) nel foglio di lavoro 1

come è possibile estrarre i dati (1,1,1,1) utilizzando i nomi di riga e colonna (D, Y1) (D, Z1) (E, Y1) (E , Z1) nel foglio di lavoro 2?

Grazie per qualsiasi aiuto fornito

Barry

+0

È necessario importare solo un sottoinsieme in R oppure è opportuno importare l'intera cosa e il sottoinsieme in R? – themel

risposta

2

Ci sono diversi pacchetti che offrono funzioni per importare i dati di Excel in R; vedere la documentazione R data import/export.

Ho trovato utile il pacchetto xlsx (leggerà entrambi i file .xls e .xlsx). Non credo che accetterà i nomi di riga/colonna come input, ma accetterà il loro valore numerico (riga 1, colonna 4 per esempio). Nel tuo caso, qualcosa di simile a questo dovrebbe funzionare, supponendo che X, Y e Z corrispondono alle colonne 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) 

Tuttavia, sarà necessario sperimentare un tuo file fino a quando le cose funzionano come previsto. Puoi anche specificare sheetName ma trovo che il foglio Index funzioni normalmente in modo più affidabile, una volta calcolato l'indice corretto per ogni foglio. E fai attenzione se la prima riga è un'intestazione.

Detto questo: mia opzione preferita sarebbe quella di esportare il foglio in un formato di testo come CSV, utilizzare strumenti di shell (taglio, testa, coda ecc) per ottenere le righe/colonne e importazione richiesti che a R.

+1

Ti raccomando di usare 'xlsx' e invece di usare' XLConnect'. Usa le stesse librerie Java per manipolare Excel, ma è 'Inf' più user-friendly. – Andrie

+0

Mille grazie per tutti i vostri commenti molto utili – barryq

8

@Andrie ha menzionato il pacchetto XLConnect, è un pacchetto molto utile per I/O tra R ed Excel con la possibilità di selezionare la regione nel foglio Excel.

Ho creato un file Excel come il tuo nella mia cartella pubblica Dropbox, è possibile scaricare il file example.xlshere.

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 
Problemi correlati