Szövegfájlok beolvasása és kiírása

Beolvasás

Szövegfájlok (pl. .txt, .csv) importálását lehetőleg kezdd azzal, hogy egy szerkesztővel (ne Excel-lel!) megnézed a fájl tartalmát. Ebből megtudhatod, hogy milyen karakter választja el az értékeket (pl. tab vagy pontosvessző), milyen karakter jelzi a tizedesvesszőt (pont vagy vessző) stb.

Alapesetben a read.table függvényt érdemes használni.(Ha kíváncsi vagy a részletekre és a mélyebb szintű függvényekre, nézd meg a hivatalos leírást).

Példa: A következőkben egy alkalmasságvizsgálati eredményeket tartalmazó szövegfájl tartalmát fogjuk beolvasni. Mivel a fájl nem a munkakönyvtárban, hanem a "data" nevű alkönyvtárban található, a fájl nevét az elérési útjával együtt kell megadnunk.

# a file.path() (vagy a normalizePath() függvény) ügyel arra,
# hogy a különböző operációs rendszerekben eltérő karakter választja el az 
# elérési útban a könyvtárak nevét
dat_txt <- read.table(file.path("data", "AlkVizsg.txt"), 
                      sep = "\t", dec = ",", header = TRUE)
str(dat_txt)
## 'data.frame':    623 obs. of  8 variables:
##  $ uzem             : Factor w/ 4 levels "EBM","Papst",..: 4 4 4 4 4 4 4 4 4 4 ...
##  $ id               : Factor w/ 623 levels "e1","e10","e100",..: 512 536 547 558 569 580 591 602 613 513 ...
##  $ d_proba_N        : int  441 370 370 348 521 445 557 400 618 543 ...
##  $ d_proba_hibaN    : int  77 174 69 34 53 29 88 50 114 121 ...
##  $ abrasor          : int  5 5 5 8 7 7 10 9 5 6 ...
##  $ abraanalogia     : int  7 4 5 6 10 9 7 8 9 8 ...
##  $ kezugyesseg_vonal: num  0.92 0.855 0.714 0.967 1 0.972 0.949 0.947 0.952 0.929 ...
##  $ kezugyesseg_pont : num  0.948 0.844 0.54 0.982 0.96 0.971 0.883 0.953 0.957 0.988 ...
# egyszerűbben
dat_txt_short <- read.delim2(file.path("data", "AlkVizsg.txt"))

# a két objektum megegyezik (nem csoda, lásd a read.delim2 forráskódját)
identical(dat_txt, dat_txt_short)
## [1] TRUE
# ugyanez egy .csv formátumú fájl esetében
dat_csv <- read.table(file.path("data", "AlkVizsg.csv"), 
                      sep = ";", dec = ",", header = TRUE)
str(dat_csv)
## 'data.frame':    623 obs. of  8 variables:
##  $ uzem             : Factor w/ 4 levels "EBM","Papst",..: 4 4 4 4 4 4 4 4 4 4 ...
##  $ id               : Factor w/ 623 levels "e1","e10","e100",..: 512 536 547 558 569 580 591 602 613 513 ...
##  $ d_proba_N        : int  441 370 370 348 521 445 557 400 618 543 ...
##  $ d_proba_hibaN    : int  77 174 69 34 53 29 88 50 114 121 ...
##  $ abrasor          : int  5 5 5 8 7 7 10 9 5 6 ...
##  $ abraanalogia     : int  7 4 5 6 10 9 7 8 9 8 ...
##  $ kezugyesseg_vonal: num  0.92 0.855 0.714 0.967 1 0.972 0.949 0.947 0.952 0.929 ...
##  $ kezugyesseg_pont : num  0.948 0.844 0.54 0.982 0.96 0.971 0.883 0.953 0.957 0.988 ...
# a két objektum megegyezik
identical(dat_txt, dat_csv)
## [1] TRUE
# egy még kényelmesebb megoldás
dat_csv_short <- read.csv2(file.path("data", "AlkVizsg.csv"))

# az eredmény újra ugyanaz
identical(dat_csv, dat_csv_short)
## [1] TRUE

Ha nagyobb fájlról van szó, érdemes áttanulmányozni a read.table dokumentációját. Az argumentumok megfelelő megválasztásával jelentősen felgyorsíthatjuk a beolvasási folyamatot.

# ennél a méretnél mindegy, de az argumentumok illusztrációjára oké
temp <- read.table(file.path("data", "AlkVizsg.txt"),
                   sep = "\t", dec = ",", header = TRUE,
                   colClasses = c("character", "character",
                                  rep("integer", 4),
                                  rep("numeric", 2)),
                   comment.char = "",
                   fileEncoding = "UTF-8",
                   nrows = 623)

Ha igazán nagy szövegfájlt próbálsz beolvasni, használd az fread függvényt a data.table csomagból.

Kiírás

A szövegfájlba történő kiírás jellemzően a write.table függvénnyel történik.

# kiírás
write.table(dat_csv, file = "temp.csv", 
            sep = ";", quote = FALSE, 
            row.names = FALSE)

# csak példa volt, töröljük is a fájlt
unlink("temp.csv")

results matching ""

    No results matching ""