R adatkeret: Létrehozás, hozzáfűzés, kijelölés és részhalmaz
⚡ Okos összefoglaló
Az R Data Frame a különböző típusú oszlopokat egyenlő hosszúságban tárolja, ami a standard téglalap alakú struktúrává teszi az elemzésekhez. A szögletes zárójelek szeletelik a sorokat és az oszlopokat, a dollárjel egy oszlopot ér el, a subset() pedig feltétel szerint szűr.

Mi az adatkeret?
A adatkeret egy egyenlő hosszúságú vektorok listája. Egy mátrix csak egyféle adatot tartalmaz, míg egy adatkeret különböző adattípusokat fogad el (numerikus, karakteres, faktoros stb.).
Ez a definíció az adatkeretet két olyan szomszéd közé helyezi, amelyekkel folyamatosan találkozunk az R-ben. mátrix téglalap alakú, de egyetlen típussal rendelkezik, és egy lista többtípusú, de egyenetlen. Az adatkeret mindegyikből kölcsönöz egy tulajdonságot.
| Szerkezet | Oszloptípusok | Elemhosszak | Tipikus felhasználás |
|---|---|---|---|
| vektor | Csak egy típus | Egyetlen szekvencia | Egy változó |
| Mátrix | Csak egy típus | Négyszögletes | Numerikus algebra |
| Lista | Bármilyen típusok keveréke | Elemenként eltérő lehet | Önkényes behajtások |
| Adatkeret | Bármilyen típusok keveréke | Minden oszlop egyenlő hosszúságú | Táblázatos elemzés |
Mivel egy adatkeret valójában egy lista alatta, a listákon használt elérők itt is működnek, ezért jelenik meg újra a dollárjel a bemutató későbbi részében.
Hogyan hozzunk létre adatkeretet
Létrehozhatunk egy adatkeretet R az a, b, c és d változók data.frame() függvénybe való átadásával. Létrehozhatjuk az adatkeretet, és elnevezhetjük az oszlopokat a names() függvénnyel, egyszerűen megadva az egyes változók nevét.
data.frame(df, stringsAsFactors = TRUE)
érvek:
- df: Ez lehet egy adatkeretként konvertálandó mátrix, vagy az összekapcsolandó változók gyűjteménye
- stringsAsFactors: Azt szabályozza, hogy a karaktervektorok faktoroszlopokká váljanak-e. A gyári alapértelmezés a régebbi kiadásokban IGAZ volt, az R 4.0.0 óta pedig HAMIS, ezért explicit módon kell átadni, ha a viselkedés számít.
Négy azonos hosszúságú változó kombinálásával létrehozhatunk egy adatkeretet R-ben az első adathalmazunkhoz.
# Create a, b, c, d variables a <- c(10,20,30,40) b <- c('book', 'pen', 'textbook', 'pencil_case') c <- c(TRUE,FALSE,TRUE,FALSE) d <- c(2.5, 8, 10, 7) # Join the variables to create a data frame df <- data.frame(a,b,c,d) df
output:
## a b c d ## 1 10 book TRUE 2.5 ## 2 20 pen FALSE 8.0 ## 3 30 textbook TRUE 10.0 ## 4 40 pencil_case FALSE 7.0
Minden vektor egy oszloppá, és az egyes vektorokban található négy értékből négy sor lett. Figyeljük meg, hogy az argumentumok névtelenek voltak, így az R az oszlopfejléceket magukból a változók nevéből származtatta.
Láthatjuk, hogy az oszlopfejlécek neve megegyezik a változókéval. Az oszlop nevét az R-ben a names() függvényekkel módosíthatjuk. Nézze meg az R létrehozási adatkeret példáját alább:
# Name the data frame names(df) <- c('ID', 'items', 'store', 'price') df
output:
## ID items store price ## 1 10 book TRUE 2.5 ## 2 20 pen FALSE 8.0 ## 3 30 textbook TRUE 10.0 ## 4 40 pencil_case FALSE 7.0
A names() függvénynek értékadáskor az összes fejléc egyszerre cserélődik, tehát a cserevektornak oszloponként pontosan egy bejegyzéssel kell rendelkeznie. Egyetlen oszlop átnevezéséhez indexelni kell a names vektort, ahogy a names(df)[2] <- 'termék' példában látható.
# Print the structure
str(df)
output:
## 'data.frame': 4 obs. of 4 variables: ## $ ID : num 10 20 30 40 ## $ items: Factor w/ 4 levels "book","pen","pencil_case",..: 1 2 4 3 ## $ store: logi TRUE FALSE TRUE FALSE ## $ price: num 2.5 8 10 7
Verzió megjegyzés. A fenti kimenet egy 4.0.0-nál régebbi R kiadáson készült, ahol a data.frame() alapértelmezés szerint karaktervektorokat faktorokká alakított, ezért a tételek négyszintű faktorként vannak jelentve. Az alap R dokumentáció rögzíti, hogy ez a gyárilag friss alapértelmezett érték. megváltozott stringsAsFactors = FALSE értékre az R 4.0.0 verzióbanUgyanennek a kódnak a jelenlegi kiadáson történő futtatása sima karakteroszlopként hagyja az elemeket, és az str() ehelyett chr értéket ír ki. Adja hozzá a stringsAsFactors = TRUE értéket a data.frame() híváshoz a kiíratott kimenet reprodukálásához, vagy olvassa be a tényező bemutató amikor ténylegesen szükség van a tényezőkre.
Adatkeret szeletelése
Miután a keret elkészült, a következő feladat az egyes részeinek kihúzása. A szeletelés az R alapvető módja ennek, és ugyanazokat a szögletes zárójeleket használja, mint a vektorok, csak két pozícióval egy helyett.
Lehetséges egy adatkeret értékeit SZELETELNI. A visszaadandó sorokat és oszlopokat szögletes zárójelben, az adatkeret nevével megelőzve választjuk ki.
Egy adatkeret sorokból és oszlopokból áll, df[A, B]. A a sorokat, B pedig az oszlopokat jelöli. A sorok és/vagy oszlopok megadásával szeletelhetünk is.
Az alábbi 1. képen a bal oldali rész a következőt ábrázolja: sorok, a jobb oldali rész pedig a oszlopok. Vegye figyelembe, hogy a : szimbólum azt jelenti nak nek. Például az 1:3 az 1-ből kíván értékeket kiválasztani nak nek 3.
Az alábbi ábrán bemutatjuk, hogyan férhet hozzá az adatkeret különböző elemeihez:
- A sárga nyíl kiválasztja a sor 1 in oszlop 2
- A zöld nyíl kiválasztja a sorok 1 a 2
- A piros nyíl kiválasztja a oszlop 1
- A kék nyíl kiválasztja a sorok 1 és 3 és oszlopok 3 a 4
Megjegyzendő, hogy ha a bal oldali részt üresen hagyjuk, R kiválasztja az összes sor. Hasonlóan, ha a jobb oldali részt üresen hagyjuk, R kiválasztja az összes oszlopot.
A kódot a konzolban futtathatjuk:
## Select row 1 in column 2
df[1,2]
output:
## [1] book ## Levels: book pen pencil_case textbook
A Levels sor azért jelenik meg, mert az elemek szerepet játszanak ebben a munkamenetben. Az R 4.0.0 és újabb verziókban ugyanaz a hívás egyetlen „book” karakterláncot nyomtatja ki Levels sor nélkül.
## Select Rows 1 to 2
df[1:2,]
output:
## ID items store price ## 1 10 book TRUE 2.5 ## 2 20 pen FALSE 8.0
## Select Columns 1
df[,1]
output:
## [1] 10 20 30 40
Egyetlen oszlop kiválasztása a df[,1] függvénnyel elveti a keretburkolót, és egy sima vektort ad vissza. Adjuk hozzá a drop = FALSE függvényt, ahogy a df[, 1, drop = FALSE] esetben, ha egyoszlopos adatkeretre van szükség.
## Select Rows 1 to 3 and columns 3 to 4
df[1:3, 3:4]
output:
## store price ## 1 TRUE 2.5 ## 2 FALSE 8.0 ## 3 TRUE 10.0
Az oszlopok nevükkel is kijelölhetők. Például az alábbi kód így néz ki:trackét oszlopot tartalmaz: ID és store.
# Slice with columns name df[, c('ID', 'store')]
output:
## ID store ## 1 10 TRUE ## 2 20 FALSE ## 3 30 TRUE ## 4 40 FALSE
A nevek biztonságosabbak, mint a pozíciók az éles kódban, mivel egy oszlop beszúrása vagy átrendezése csendben megváltoztatja, hogy mire hivatkozik a df[, 3], miközben a df[, 'store'] továbbra is ugyanarra az adatra mutat.
Oszlop hozzáfűzése az adatkerethez
Oszlopot is hozzáfűzhetsz egy adatkerethez. Az R-ben a $ szimbólummal kell elnevezést végezned az új változóhoz, és hozzá kell adnod egy oszlopot egy adatkerethez.
# Create a new vector quantity <- c(10, 35, 40, 5) # Add `quantity` to the `df` data frame df$quantity <- quantity df
output:
## ID items store price quantity ## 1 10 book TRUE 2.5 10 ## 2 20 pen FALSE 8.0 35 ## 3 30 textbook TRUE 10.0 40 ## 4 40 pencil_case FALSE 7.0 5
Megjegyzés: A vektor elemszámának meg kell egyeznie az adatkeret elemszámával. Az alábbi utasítás végrehajtásával adjunk hozzá egy oszlopot az adatkerethez R-ben:
quantity <- c(10, 35, 40)
# Add `quantity` to the `df` data frame
df$quantity <- quantity
Hibát ad:
Error in `lt;-.data.frame`(`*tmp*`, quantity, value = c(10, 35, 40))
replacement has 3 rows, data has 4
Az üzenet megnevezi az adatkeretekhez tartozó csereoperátort, és megadja mindkét darabszámot, így pontosan megmondja, hogy mit kell javítani. Az R csak akkor újrahasznosítja a csereoperátort, ha annak hossza egyenletesen osztja el a sorok számát, ezért fogad el egy 1-es hosszúságú értéket, például a df$currency <- 'EUR', míg egy 3-as hosszúságú vektort négy sorral szemben elutasít. A cbind() ugyanígy ad hozzá egy oszlopot, az rbind() pedig a sorok hozzáadásához szükséges megfelelője.
Válassza ki az adatkeret oszlopát
Előfordulhat, hogy egy adatkeret egy oszlopát későbbi felhasználásra tárolnunk kell, vagy műveletet kell végrehajtanunk egy oszlopon. A $ jellel jelölhetjük ki az oszlopot egy adatkeretből.
# Select the column ID
df$ID
output:
## [1] 1 2 3 4
Figyelmesen olvasd el a kimenetet. Az azonosítót a c(10, 20, 30, 40) vektorból állítottuk elő, így egy élő konzol itt 10 20 30 40-et ír ki; a fent látható 1 2 3 4 sorpozíciókat jelöl, nem pedig a tárolt értékeket. A sor elején lévő [1] egyszerűen a sor első elemének indexe, nem az adat része.
Három útvonal éri el ugyanazt az oszlopot: a df$ID, a df[['ID']] és a df[, 'ID']. A dollárjel részleges egyezést végez, így a df$I továbbra is megtalálja az ID-t, ami kényelmes a konzolon, de kockázatos egy mentett szkriptben.
Adatkeret részhalmaza
Az előző részben egy teljes oszlopot jelöltünk ki feltétel nélkül. Lehetséges részhalmaza az alapján, hogy egy bizonyos feltétel igaz-e vagy sem.
A subset() függvényt használjuk.
subset(x, condition) arguments: - x: data frame used to perform the subset - condition: define the conditional statement
Csak az 5 feletti árat tartalmazó termékeket szeretnénk visszaküldeni, ezért a következőket tehetjük:
# Select price above 5
subset(df, subset = price > 5)
output:
ID items store price 2 20 pen FALSE 8 3 30 textbook TRUE 10 4 40 pencil_case FALSE 7
A 2., 3. és 4. sorcímkék az eredeti sornevek, amelyeket a df függvényből vettünk át, innen látszik, hogy az első sort kiszűrtük. A subset() függvény elfogad egy select argumentumot is az oszlopok egyidejű kiválasztásához, és az ezzel egyenértékű zárójeles alak a df[df$price > 5, ]. A zárójeles alak megtartja azokat a sorokat, amelyekben hiányzik a feltétel, míg a subset() elhagyja azokat, így a kettő nem mindig felcserélhető.

![R adatkeret szeletelési szintaxis df[A, B], ahol a sorok a vessző bal oldalán, az oszlopok pedig a jobb oldalán helyezkednek el](https://www.guru99.com/images/r_programming/032918_1452_RDataFrames1.png)
