Adatkezelés R-ben

Kategória: Adattudomány R-ben

Adatkezelés

Adatok összefoglalása

Az R-ben tipikusan rengeteg adattal dolgozunk, melynek teljes áttekintése nem könnyű feladat. Az alábbi függvények gyors, de nem részletes áttekintést tesznek lehetővé:

summary(): adattípustól függő összegzést készít.

summary(iris)

Eredmény:

  Sepal.Length    Sepal.Width     Petal.Length    Petal.Width          Species  
 Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100   setosa    :50  
 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300   versicolor:50  
 Median :5.800   Median :3.000   Median :4.350   Median :1.300   virginica :50  
 Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199                  
 3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800                  
 Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500

head(), tail(): az első ill. utolsó pár adatot tudjuk megjeleníteni, pl. egy hosszú szöveg vagy nagy adatkeret első vagy utolsó néhány sorát.

head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
tail(iris)
    Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
145          6.7         3.3          5.7         2.5 virginica
146          6.7         3.0          5.2         2.3 virginica
147          6.3         2.5          5.0         1.9 virginica
148          6.5         3.0          5.2         2.0 virginica
149          6.2         3.4          5.4         2.3 virginica
15

str(): az adatok struktúráját adja vissza.

str(iris)
'data.frame':   150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

object.size(): az objektum bájtban kifejezett méretét adja vissza.

object.size(iris)
7256 bytes

names(): az elnevezéseket adja vissza, pl. az adatkeretek oszlopneveit.

names(iris)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"

quantile(): a paraméterül átadott értékek legfontosabb kvantilisait (legkisebb elem, 25%, medián, 75%, legnagyobb elem) adja vissza.

quantile(iris$Sepal.Length)
  0%  25%  50%  75% 100% 
 4.3  5.1  5.8  6.4  7.9

table(): táblázatot készít. Ha pl. egy nagy adatkeret két oszlopát adjuk paraméterül, akkor a táblázat egy cellája azt mutatja meg, hogy adott kombinációval hány elem fordul elő. Ha egy vektort adunk át, akkor megmutatja, hogy melyik elem hányszor fordul elő.

table(iris$Species)
    setosa versicolor  virginica 
        50         50         50

xtabs(): szintén tartalmazás táblát készít, de komplexebb eseteket is képes kezelni.

xtabs(~Species+Sepal.Width, iris)
            Sepal.Width
Species       2 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9  3 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9  4 4.1 4.2 4.4
  setosa      0   0   1   0   0   0   0   0   1  6   4   5   2   9   6   3   3   4   2  1   1   1   1
  versicolor  1   2   3   3   4   3   5   6   7  8   3   3   1   1   0   0   0   0   0  0   0   0   0
  virginica   0   1   0   0   4   2   4   8   2 12   4   5   3   2   0   1   0   2   0  0   0   0   0

rowSums(), colSums(): soronkénti ill. oszloponkénti összegzés.

Az alábbi példáknak sok értelmük nincs (az első összeadja az összes virág mind a 4 sziromméretét a második pedig virágonként a 4 értéket), de jól illusztrálják a parancsok használatát.

colSums(iris[1:4])
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
       876.5        458.6        563.7        179.9
rowSums(iris[1:4])
  [1] 10.2  9.5  9.4  9.4 10.2 11.4  9.7 10.1  8.9  9.6 10.8 10.0  9.3  8.5 11.2 12.0 11.0 10.3 11.5 10.7 10.7 10.7  9.4 10.6 10.3
 [26]  9.8 10.4 10.4 10.2  9.7  9.7 10.7 10.9 11.3  9.7  9.6 10.5 10.0  8.9 10.2 10.1  8.4  9.1 10.7 11.2  9.5 10.7  9.4 10.7  9.9
 [51] 16.3 15.6 16.4 13.1 15.4 14.3 15.9 11.6 15.4 13.2 11.5 14.6 13.2 15.1 13.4 15.6 14.6 13.6 14.4 13.1 15.7 14.2 15.2 14.8 14.9
 [76] 15.4 15.8 16.4 14.9 12.8 12.8 12.6 13.6 15.4 14.4 15.5 16.0 14.3 14.0 13.3 13.7 15.1 13.6 11.6 13.8 14.1 14.1 14.7 11.7 13.9
[101] 18.1 15.5 18.1 16.6 17.5 19.3 13.6 18.3 16.8 19.4 16.8 16.3 17.4 15.2 16.1 17.2 16.8 20.4 19.5 14.7 18.1 15.3 19.2 15.7 17.8
[126] 18.2 15.6 15.8 16.9 17.6 18.2 20.1 17.0 15.7 15.7 19.1 17.7 16.8 15.6 17.5 17.8 17.4 15.5 18.2 18.2 17.2 15.7 16.7 17.3 15.8

Adatok létrehozása

rep

Adott értéket ismétel, pl. a 3-at négyszer:

rep(3, 4)
[1] 3 3 3 3

seq

Szekvenciát hoz létre.

seq(1, 9, by=2)

Kettesével számol 1-től 9-ig:

[1] 1 3 5 7 9
seq(1, 9, length=3)

Itt az eredmény hossza van megadva:

[1] 1 5 9

ifelse

Olyan szekvenciát hoz létre, ami feltételtől függően két értéket vehet fel, pl.:

ifelse(1:9 < 5, "small", "big")
[1] "small" "small" "small" "small" "big"   "big"   "big"   "big"   "big"

cut

Kategorikus változókat hoz létre. Az egyes elemeket átalakítja a tartalmazó intervallumokká.

cut(1:10, breaks=c(0, 3, 7, 10))
 [1] (0,3]  (0,3]  (0,3]  (3,7]  (3,7]  (3,7]  (3,7]  (7,10] (7,10] (7,10]
Levels: (0,3] (3,7] (7,10]

Véletlen szám generálás

rnorm

Standard normális eloszlású véletlen számok generálása:

rnorm(5)
[1] -0.2581831  0.1462528 -2.3366610 -0.8379243 -0.5792900

Megadható a várható érték és a szórás:

rnorm(5, 100, 15)
[1] 114.44141 113.98491 123.41828  82.18646 109.37863

runif

Folytonos egyenletes eloszlású véletlen szám a [0, 1] intervallumon:

runif(5)
[1] 0.2311912 0.6131784 0.7384209 0.5221001 0.1427425

A végpontok megadhatóak:

runif(5, 0, 100)
[1] 67.80824 41.84025 39.86583 52.41557 85.44915

rpois

Poisson eloszlású véletlen szám generálása (lambda = 2):

rpois(5, 2)
[1] 2 0 2 4 3

Számos egyéb eloszlású véletlen szám generálható.

sample

Véletlen permutáció:

sample(5)
[1] 5 3 2 1 4

Értékek véletlen választása adott listából:

sample(1:100, 5)
[1] 19 27 42 94 70

Adatfeldolgozás

Ebben a fejezetben alap lekérdezéseket és átalakításokat hajtunk végre adatkereten natív R-ben, majd megnézzük a dplyr csomag nyújtotta lehetőségeket.

Adatfeldolgozás natív R-ben

Oszlopok kiválasztása

Az oszlopneveket vektorként kell átadni:

mtcars[, c("mpg", "hp", "cyl")]

Eredmény:

                     mpg  hp cyl
Mazda RX4           21.0 110   6
Mazda RX4 Wag       21.0 110   6
Datsun 710          22.8  93   4
Hornet 4 Drive      21.4 110   6
Hornet Sportabout   18.7 175   8
Valiant             18.1 105   6
Duster 360          14.3 245   8
Merc 240D           24.4  62   4
Merc 230            22.8  95   4
Merc 280            19.2 123   6
Merc 280C           17.8 123   6
Merc 450SE          16.4 180   8
Merc 450SL          17.3 180   8
Merc 450SLC         15.2 180   8
Cadillac Fleetwood  10.4 205   8
Lincoln Continental 10.4 215   8
Chrysler Imperial   14.7 230   8
Fiat 128            32.4  66   4
Honda Civic         30.4  52   4
Toyota Corolla      33.9  65   4
Toyota Corona       21.5  97   4
Dodge Challenger    15.5 150   8
AMC Javelin         15.2 150   8
Camaro Z28          13.3 245   8
Pontiac Firebird    19.2 175   8
Fiat X1-9           27.3  66   4
Porsche 914-2       26.0  91   4
Lotus Europa        30.4 113   4
Ford Pantera L      15.8 264   8
Ferrari Dino        19.7 175   6
Maserati Bora       15.0 335   8
Volvo 142E          21.4 109   4

A [] eredményének típusa mindig megegyezik az eredetiével. Ezzel tetszőleges számú elemet kiválaszthatunk, pl. v[5], v[c(2, 4:7)]

Ugyanakkor a [[]] segítségével listák és adatkeretek elemeit lehet megcímezni. Az eredményének a típusa nem feltétlenül egyezik meg az eredetiével, és ezzel csak egy elemet választhatunk ki. Példa: l[[2]]

Szűrés

A szűrés szintaxisát az alábbi példa illusztrálja.

mtcars[mtcars$mpg > 20 & mtcars$cyl == 6, ]

Figyeljük meg az egyszeres logikai és műveletet (&). Ez úgy működik, hogy a mtcars$mpg > 20 létrehoz egy annyi elemből álló logikai értékeket tartalmazó listát, ahány eleme van az adatkeretnek, hasonlóan a mtcars$cyl == 6, majd elemenként történik az és kapcsolat. Ez a megközelítés általában jellemzi az adatkereteket, nemcsak R-ben. Az eredmény:

                mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4      21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag  21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Hornet 4 Drive 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1

Rendezés

Az order() segítéségével lehet megadni a sorrendet:

mtcars[order(-mtcars$hp), ]

Eredmény:

                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2

Új oszlop hozzáadása

Oszlopot az alábbi módon tudunk hozzáadni:

mtcars$kilo_per_liter <- mtcars$mpg * 0.425
head(mtcars)

Ez módosítja az eredeti adatkeretet:

                   mpg cyl disp  hp drat    wt  qsec vs am gear carb kilo_per_liter
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4         8.9250
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4         8.9250
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1         9.6900
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1         9.0950
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2         7.9475
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1         7.6925

Itt érdemes megemlíteni még a cbind() és az rbind() parancsokat, amelyekkel oszlopokat ill. sorokat tudunk hozzáadni.

Összesítés

Összesítési műveleteket az adatokon és új adatkeretet az alábbi szintaxissal tudunk létrehozni:

data.frame(
    atlag_hp = mean(mtcars$hp),
    median_mpg = median(mtcars$mpg)
)

Eredmény:

  atlag_hp median_mpg
1 146.6875       19.2

Műveletek összevonása

Kompakt ódon tudunk műveleteket összevonni:

mean(mtcars[mtcars$cyl == 6 & mtcars$mpg > 20, ]$hp)
[1] 110

Adatfeldolgozás a dplyr csomag segítségével

Ez a csomag további adatelemzést és -feldolgozást tesz lehetővé, sajátos szintaxissal. Megnézzük a fenti műveleteket ebben a rendszerben is.

Telepítés

Ez nem része az alap telepítésnek, tehát a szokásos módon fel kell telepíteni, és használat előtt be kell tölteni:

install.packages("dplyr")
library(dplyr)

Oszlopok kiválasztása

A select() parancs segítségével tudunk oszlopot kiválasztani, pl.:

mtcars %>% select(mpg, hp, cyl)

Figyeljük meg a %>% szintaxist, ami jellemzi a dplyr csomagot. Az eredmény:

                     mpg  hp cyl
Mazda RX4           21.0 110   6
Mazda RX4 Wag       21.0 110   6
Datsun 710          22.8  93   4
Hornet 4 Drive      21.4 110   6
Hornet Sportabout   18.7 175   8
Valiant             18.1 105   6
Duster 360          14.3 245   8
Merc 240D           24.4  62   4
Merc 230            22.8  95   4
Merc 280            19.2 123   6
Merc 280C           17.8 123   6
Merc 450SE          16.4 180   8
Merc 450SL          17.3 180   8
Merc 450SLC         15.2 180   8
Cadillac Fleetwood  10.4 205   8
Lincoln Continental 10.4 215   8
Chrysler Imperial   14.7 230   8
Fiat 128            32.4  66   4
Honda Civic         30.4  52   4
Toyota Corolla      33.9  65   4
Toyota Corona       21.5  97   4
Dodge Challenger    15.5 150   8
AMC Javelin         15.2 150   8
Camaro Z28          13.3 245   8
Pontiac Firebird    19.2 175   8
Fiat X1-9           27.3  66   4
Porsche 914-2       26.0  91   4
Lotus Europa        30.4 113   4
Ford Pantera L      15.8 264   8
Ferrari Dino        19.7 175   6
Maserati Bora       15.0 335   8
Volvo 142E          21.4 109   4

Szűrés

A filter() parancs segítéségével tudunk adott értékekre szűrni, pl.:

mtcars %>% filter(mpg > 20, cyl == 6)

Eredmény:

                mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4      21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag  21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Hornet 4 Drive 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1

Új oszlop hozzáadása

A mutate() parancs segítéségével tudunk módosítani az adaton, pl. új oszlopot hozzáadni:

mtcars %>% mutate(kilo_per_liter = mpg * 0.425)

Megjegyzés: az eredeti adat nem változik, a módosítás tehát egy új adathalmazon jelentkezik. Eredmény:

                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb kilo_per_liter
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4         8.9250
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4         8.9250
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1         9.6900
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1         9.0950
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2         7.9475
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1         7.6925
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4         6.0775
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2        10.3700
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2         9.6900
Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4         8.1600
Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4         7.5650
Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3         6.9700
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3         7.3525
Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3         6.4600
Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4         4.4200
Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4         4.4200
Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4         6.2475
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1        13.7700
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2        12.9200
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1        14.4075
Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1         9.1375
Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2         6.5875
AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2         6.4600
Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4         5.6525
Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2         8.1600
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1        11.6025
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2        11.0500
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2        12.9200
Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4         6.7150
Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6         8.3725
Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8         6.3750
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2         9.0950

Rendezés

Az arange() parancs teszi lehetővé a rendezést:

mtcars %>% arrange(desc(hp))

Eredmény:

                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2

Összesítés

A summarize() összesítést végez, pl. átlag számolást. Példa:

mtcars %>% summarise(atlag_hp = mean(hp), median_mpg = median(mpg))

Eredmény:

  atlag_hp median_mpg
1 146.6875       19.2

Műveletek összevonása

A dplyr egyik ereje a láncolásban van: a parancsok egymás után fűzhetőek, ahogy a következő példán is látható:

mtcars %>% filter(cyl == 6, mpg > 20) %>% summarise(atlag_hp = mean(hp))

Eredmény:

  atlag_hp
1      110

Dátumkezelés

Az időkezelés sehol sem egyszerű, és nincs ez másképp az R-ben sem.

Ma és most

Az aktuális napot a következőképpen tudjuk lekérdezni:

today <- Sys.Date()
today
[1] "2025-08-24"

Az aktuális időpontot pedig a következőképpen

now <- Sys.time()
now
[1] "2025-08-24 10:41:15 CEST"

Dátum és időpont

Az R különbséget tesz dátum és időpont között. Dátumot a következőképpen tudunk létrehozni:

as.Date("2025-08-24")
[1] "2025-08-24"

Az időpont ennél bonyolultabb, azt külön nézzük meg.

Naptár és Unix rendszeridő

Alapvetően kétféle megközelítést alkalmazhatunk az időpont kezelésénél.

1. Naptár megközelítést, ami tartalmazza az évet, hónapot, napot, órát, percet, másodpercet, időzónát stb. Átalakítása a as.POSIXlt() függvénnyel történik. Ezáltal lehetővé válik az egyes komponensek lekérdezése, mint pl. az, hogy az adott időpont hányadik nap az adott évben:

nowLocalTime <- as.POSIXlt(now)
nowLocalTime$yday
[1] 235

2. Unix rendszeróra megközelítés, ami az 1970.01.01 00:00:00 UTC óta eltelt másodperceket tartalmazza, tehát egy globális, időzóna nélküli abszolút időt. Használata:

unclass(as.POSIXct(now))
[1] 1756024876

Itt tehát nincs év, hónap, nap, időzóna stb., hanem egy abszolút időpont.

Formázás

Ha másképp szeretnénk formázni az időpontot, azt a format() függvény seg.tségével tudjuk megtenni, pl.:

format(now, "%Y/%m/%d %H:%M:%S %z")
[1] "2025/08/24 10:41:15 +0200"

Fordítva, egy sajátosan formázott stringből a strptime() segítségével tudjuk kinyerni az időpontot:

strptime("2025/03/30 04:00:00", "%Y/%m/%d %H:%M:%S")
[1] "2025-03-30 04:00:00 CEST"

Műveletek

Az összehasonlító műveletekkel össze tudunk hasonlítani dátumokat ill. időpontokat, pl.:

as.Date("2025-08-24") < as.Date("2025-08-25")
[1] TRUE

A kivonás művelet képezhetjük két dátum ill. időpont különbségét. Ez jól működik a szökőnapnál:

as.Date("2024-03-01") - as.Date("2024-02-28")
Time difference of 2 days

valamint a nyári időszámításra történő átállásnál is:

strptime("2025-03-30 04:00:00", "%Y-%m-%d %H:%M:%S") - strptime("2025-03-30 01:00:00", "%Y-%m-%d %H:%M:%S")
Time difference of 2 hours

Számokat is tudunk hozzáadni ill. kivonni. Dátum esetén napokat, míg időpont esetén másodperceket ad hozzá ill. von ki belőle.

today
[1] "2025-08-24"
today + 1
[1] "2025-08-25"
today - 1
[1] "2025-08-23"
now
[1] "2025-08-24 10:41:15 CEST"
now + 60
[1] "2025-08-24 10:42:15 CEST"
now - 60
[1] "2025-08-24 10:40:15 CEST"

Adatok írása-olvasása

Fájl műveletek

  • getwd(), setwd("könyvtárnév") - a munkakönyvtár lekérdezése, beállítása
  • file.exists("könyvtárnév") - annak ellenőrzése, hogy létezik-e a fájl vagy könyvtár
  • dir.create("könyvtárnév") - könyvtár létrehozása
  • list.files("könyvtárnév") - adott könyvtárban található fájlok kilistázása
  • download.file("fájlnév") - fájl letöltése az internetről
  • readLines() - sorok beolvasása szövegből
  • Lehetőségek: file(), gzfle(), bzfile().
  • Példa: con <- file("filename.txt", "r"); readLines(5); close(con)
  • Fájl letöltése internetről: url("http://…")

Szerializálás

  • Egy objektum szerializálása: dput(), melynek a párja dget(). Pl. dput(fruits, file="fruits.R"), majd fruits2 <- dget("fruits.R").
  • Több objektum szerializálása: dump(), melynek a párja source(). A szintaxis hasonló mint a fenti.

Táblázatos adatok beolvasása

Parancs: read.table(), pl. fruits <- read.table("table.txt"). Alapértelmezésben fejléc nélküli, vesszővel elválasztott fájlként olvassa be . Az eredmény adatkeret lesz, a típusokat megpróbálja kitalálni. Paraméterekkel sok minden beállítható. Hasonló függvény a read.csv(), ami a read.table() függvényt hívja meg olyan paraméterekkel, hogy az megfeleljen a csv fájltípusnak (pl. fejléccel).

Excel:

  • library(readxl)
  • read_excel("fájlnév.xlsx")

XML

  • library(XML)
  • doc <- xmlTreeParse("fájlnév.xml") - XML beolvasása
  • node <- xmlRoot(doc) - a gyökér node lekérése
  • names(node) - egy node alatti node-ok nevei
  • node[[1]] - egy node alatti első elem lekérdezése
  • xmlSApply(node, xmlValue) - a fájl részeinek lekérdezése
  • xpathSApply(node, "xPathKifejezés", xmlValue) - XPath lekérdezés

JSON

  • library(jsonlite)
  • jsonData <- fromJSON("uri") - beolvasás
  • toJson(jsonData) - kiírás
  • names(jsonData) - mező nevek
  • jsonData$name - egy adott mező elérése

Adattáblák

Hasonló mint az adat keret (data frame), viszont sokkal több lehetőséget nyújt.
* library(data.table)
* dt <- data.table(…)

Adatbázisok

MySQL:

  • library(RMySQL)
  • dbConn <- dbConnect(MySQL(), user="username", password="password" host="hostname", port="port", dbname="dbname")
  • dbListTables(dbConn)
  • dbListFields(dbConn, "tablename")
  • dbReadTable(dbConn, "tablename")
  • fetch(dbSendQuery(dbConn, "SELECT …"))
  • dbDisconnect(dbConn)

További adatbázisok is használhatóak:

  • library(RPostgreSQL)
  • library(RODBC) (PostgreQL, MySQL, Microsoft Access, SQLite)
  • library(RMongo)

HDF5

Ez a formátum nagy adathalmazok tárolására szolgál.

  • library(rhdf5)
  • h5read(…)
  • h5write(…)

API

  • library(httr)
  • GET("URL")

Képek

A különböző adatformátumokhoz találunk megfelelő könyvtárat:

  • library(jpeg)
  • library(readbitmap)
  • library(png)

GIS

Térképes adatok olvasására használatos csomagok:
*library(rgdal)

  • library(rgeos)
  • library(raster)

Zene

Zenefájlok olvasása:

  • library(tuneR)
  • library(seewave)
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License