Manual de R (Estadística)/Llegir i escriure fitxers de dades

Definir el directori de treball modifica

Al llegir un fitxer extern, el R, si no s'indica el seu camí, el busca en el directori que te definit como directori de treball. Aquest es pot definir amb la ordre setwd, per exemple, en linux seria setwd("~/dades") o en windows setwd("C:/dades").

Per saber quin és directori de treball que en un moment donat s'està utilitzant, s'executarà l'ordre getwd().

Importar dades modifica

Una forma universal d'intercanviar fitxers amb el R i altres programes és amb fitxers plans[1] en el que els camps estan separats, p. ex., per ";" i amb els noms dels camps en la primera fila. Aquest és un tipus de fitxer que tots els fulls de càlcul o les bases de dades poden crear fàcilment. Es poden llegir amb la ordre read.table(). Per exemple, les dades Aids2 anteriors (Una taula de dades) també estan en el directori de treball i amb el format pla:

"state";"sex";"diag";"death";"status";"T.categ";"age"
"1";"NSW";"M";10905;11081;"D";"hs";35
"2";"NSW";"M";11029;11096;"D";"hs";53
"3";"NSW";"M";9551;9983;"D";"hs";42
...

és a dir, en la primera fila hi ha els noms de les variables i en la primera columna el nombre que identifica al individu, i els camps estan separats per ";". Per llegir-les i emmagatzemar-les en una taula de dades R amb el nom AIDS s'utilitza la funció read.table i l'operador d'assignació "=" (també es pot utilitzar el símbol "<-") per emmagatzemar el resultat de la lectura en la taula de dades AIDS:

# Llegir el fitxer Aids2.csv i guardar-lo amb el nom AIDS
> AIDS = read.table(file="Aids2.csv",        # Nom del fitxer
                    header=TRUE,             # Primera fila: noms de les variables
                    sep=';',                 # El separador dels camps és un ";"
                    dec=',',                 # El separador de decimals és una coma
                    row.names=1,             # Columna amb el identificador dels individus
                    na.strings = "NA",       # Els valors desconeguts estan com "NA"
                    nrows = -1,              # Nombre màxim de línies a llegir (-1: totes)
                    blank.lines.skip = TRUE  # No importar línies en blanc
                    )

> str(AIDS)                                  # Mostra l'estructura del fitxer
'data.frame':	2843 obs. of  7 variables:
 $ state  : Factor w/ 4 levels "NSW","Other",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ sex    : Factor w/ 2 levels "F","M": 2 2 2 2 2 2 2 2 2 2 ...
 $ diag   : int  10905 11029 9551 9577 10015 9971 10746 10042 10464 10439 ...
 $ death  : int  11081 11096 9983 9654 10290 10344 11135 11069 10956 10873 ...
 $ status : Factor w/ 2 levels "A","D": 2 2 2 2 2 2 2 2 2 2 ...
 $ T.categ: Factor w/ 8 levels "blood","haem",..: 4 4 4 2 4 4 8 4 4 5 ...
 $ age    : int  35 53 42 44 39 36 36 31 26 27 ...

> head(AIDS)                                  # Mostrar els 6 primers registres
  state sex  diag death status T.categ age
1   NSW   M 10905 11081      D      hs  35
2   NSW   M 11029 11096      D      hs  53
3   NSW   M  9551  9983      D      hs  42
4   NSW   M  9577  9654      D    haem  44
5   NSW   M 10015 10290      D      hs  39
6   NSW   M  9971 10344      D      hs  36

Si els valors desconeguts en el fitxer pla no estan com NA sinó que estan, per exemple, com un punt ("."), s'indicarà amb l'opció na.strings (na.strings = "."). D'aquesta manera, aquests valors es convertiran en NA.

També es poden carregar les dades que estan en un full de càlcul (provat amb gnumeric i LibreOffice amb Debian 7 i Excel en Windows) simplement seleccionant en el full de càlcul les caselles que es volen exportar i fer "copiar" (ctrl + c). Després dintre del R executar l'ordre read.delim ó read.table [2]:

DADES = read.delim("clipboard")
DADES = read.table("clipboard")

Exportar dades modifica

Es pot fer amb l'ordre write.table():

write.table(taula.de.dades,
            "C:/temp/taula.de.dades.txt", sep=" ",
            col.names=TRUE,
            row.names=TRUE,
            quote=TRUE, na="NA")

Per exemple, per exportar les dades dels malalts amb sida en un fitxer pla amb els camps separats per ";" i que es desi al directori de treball:

data(Aids2, package="MASS")                 # És carregen les dades
write.table(Aids2,                          # S'exporten les dades
            "Aids2.csv",                    # Nom del fitxer pla
            sep=";",                        # Separador dels camps
            col.names=TRUE,                 # Desar també els noms de les variables
            row.names=TRUE,                 # Desar també el nombre dels individus (files)
            quote=TRUE,
            na="NA")

Com s'ha especificat na="NA", en el fitxer csv els valors mancants són substituïts per un "NA". Si es vol un espai en buit, especificar na="".

Referències modifica

  1. Fitxers plans
  2. Copy/Paste extern