R-tietokehys: Luominen, liittäminen, valinta ja osajoukko

⚡ Älykäs yhteenveto

R Data Frame tallentaa erityyppisiä sarakkeita yhtä pitkinä, mikä tekee siitä analyysin standardin suorakaiteen muotoisen rakenteen. Hakasulkeet viipaloivat rivejä ja sarakkeita, dollarimerkki saavuttaa sarakkeen ja subset() suodattaa ehdon mukaan.

  • 🧱 Rakenne: Datakehys on lista yhtä pitkiä vektoreita, joten jokaisessa sarakkeessa voi olla eri tyyppiä.
  • 🛠️ Creation: data.frame(a, b, c, d) yhdistää neljä vektoria ja names() nimeää jokaisen sarakkeen uudelleen sen jälkeen.
  • ✂️ Viipalointi: df[A, B] lukee ensin riveinä ja sitten sarakkeina, ja tyhjä puoli valitsee kaiken sillä puolella.
  • ➕ Liittäminen: df$quantity määrittää uuden sarakkeen, edellyttäen että uusi vektori vastaa täsmälleen rivien lukumäärää.
  • 🔎 Suodatus: subset(df, subset = price > 5) säilyttää vain rivit, joilla ehto antaa tulokseksi TRUE.
  • ⚠️ Versio Shift: Koska R 4.0.0 on käytössä, stringsAsFactors-oletusarvo on FALSE, joten tekstisarakkeet pysyvät merkeinä.

R-tietokehys Luo Liitä Valitse ja Osajoukko

Mikä on tietokehys?

A datakehys on lista vektoreita, joiden pituus on sama. Matriisi sisältää vain yhden tyyppistä dataa, kun taas datakehys hyväksyy erityyppisiä datamuotoja (numeerisia, merkki-, tekijä- jne.).

Tuo määritelmä sijoittaa datakehyksen kahden naapurin väliin, jotka kohtaat jatkuvasti R:ssä. A matriisi on suorakaiteen muotoinen, mutta yksityyppinen, ja lista on monityyppinen mutta epätasainen. Tietokehys lainaa yhden ominaisuuden jokaiselta.

Tuote mallit Saraketyypit Elementtien pituudet Tyypillinen käyttö
vektori Vain yksi tyyppi Yksittäinen sekvenssi Yksi muuttuja
Matriisi Vain yksi tyyppi Suorakulmainen Numeerinen algebra
Lista Mikä tahansa tyyppien yhdistelmä Voi vaihdella elementtikohtaisesti Mielivaltaiset perinnät
Datakehys Mikä tahansa tyyppien yhdistelmä Jokainen sarake on yhtä pitkä Taulukkoanalyysi

Koska datakehys on itse asiassa alla oleva lista, listoissa käytetyt aksessorit toimivat myös tässä, minkä vuoksi dollarimerkki näkyy uudelleen myöhemmin tässä opetusohjelmassa.

Tietokehyksen luominen

Voimme luoda datakehyksen sisään R välittämällä muuttujat a, b, c ja d data.frame()-funktiolle. Voimme luoda datakehyksen ja nimetä sarakkeet names()-funktiolla, yksinkertaisesti määrittämällä kunkin muuttujan nimen.

data.frame(df, stringsAsFactors = TRUE)

argumentit:

  • df: Se voi olla matriisi, joka muunnetaan tietokehykseksi tai kokoelma muuttujia, jotka yhdistetään
  • stringsAsFactors: Määrittää, tulevatko merkkivektoreista tekijäsarakkeita. Tehdasasetus oli TRUE vanhemmissa versioissa ja FALSE R 4.0.0:sta lähtien, joten anna se erikseen, kun toiminnalla on merkitystä.

Voimme luoda tietokehyksen R:ssä ensimmäiselle tietojoukollemme yhdistämällä neljä samanpituista muuttujaa.

# 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

lähtö:

##     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

Jokaisesta vektorista tuli sarake, ja kunkin vektorin neljästä arvosta tuli neljä riviä. Huomaa, että argumentit olivat nimeämättömiä, joten R johti sarakeotsikot itsestään muuttujien nimistä.

Voimme nähdä, että sarakeotsikoilla on sama nimi kuin muuttujilla. Voimme muuttaa sarakkeen nimeä R:ssä funktiolla names(). Tarkista alla oleva R-luontitietokehyksen esimerkki:

# Name the data frame
names(df) <- c('ID', 'items', 'store', 'price')
df

lähtö:

##   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

Funktioon names() tehtävä määritys korvaa kaikki otsikot kerralla, joten korvaavassa vektorissa on oltava täsmälleen yksi merkintä saraketta kohden. Yhden sarakkeen nimeämiseksi uudelleen indeksoi nimivektori, kuten names(df)[2] <- 'product'.

# Print the structure
str(df)

lähtö:

## '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

Versiohuomautus. Yllä oleva tuloste on tuotettu R-versiossa, joka on vanhempi kuin versio 4.0.0, jossa data.frame() muunsi merkkivektorit oletusarvoisesti tekijöiksi, minkä vuoksi kohteet raportoidaan tekijänä, jolla on neljä tasoa. R-perusdokumentaatiossa on kirjattu, että tämä on tehtaan tuore oletusarvo. muutettu muotoon stringsAsFactors = FALSE R 4.0.0:ssaSaman koodin suorittaminen nykyisessä versiossa jättää alkiot tavalliseksi merkkisarakkeeksi ja str() tulostaa sen sijaan merkin chr. Lisää stringsAsFactors = TRUE data.frame()-kutsulle toistaaksesi tulosteen tai lue tekijäopas silloin, kun tekijöitä todella tarvitaan.

Leikkaa tietokehys

Kun kehys on rakennettu, seuraava tehtävä on vetää osia siitä takaisin ulos. Viipalointi on R:n perustapa tehdä se, ja siinä käytetään samoja hakasulkeita kuin vektoreissa, vain kahdessa kohdassa yhden sijaan.

Datakehyksen arvoja on mahdollista viipaloida. Valitsemme palautettavat rivit ja sarakkeet hakasulkeissa, joita edeltää datakehyksen nimi.

Tietokehys koostuu riveistä ja sarakkeista, df[A, B]. A edustaa rivejä ja B sarakkeita. Voimme viipaloida joko määrittämällä rivit ja/tai sarakkeet.

Alla olevasta kuvasta 1 vasen puoli edustaa rivit, ja oikea osa on sarakkeet. Huomaa, että symboli : tarkoittaa että. Esimerkiksi 1:3 aikoo valita arvot 1:stä että 3.

R-datakehyksen viipalointisyntaksi df[A, B], jossa rivit ovat pilkun vasemmalla puolella ja sarakkeet oikealla puolella

Alla olevassa kaaviossa näytämme, miten datakehyksen eri valintoihin pääsee käsiksi:

Värilliset nuolet R-datakehyksen päällä, jotka näyttävät yksittäisen solun, rivialueen, koko sarakkeen ja lohkon valinnat

  • Keltainen nuoli valitsee rivi 1 vuonna sarake 2
  • Vihreä nuoli valitsee riviä 1 ja 2
  • Punainen nuoli valitsee sarake 1
  • Sininen nuoli valitsee riviä 1-3 ja sarakkeet 3 ja 4

Huomaa, että jos jätämme vasemman osan tyhjäksi, R valitsee kaikki rivit. Analogisesti, jos jätämme oikean osan tyhjäksi, R valitsee kaikki sarakkeet.

Voimme ajaa koodin konsolissa:

## Select row 1 in column 2
df[1,2]

lähtö:

## [1] book
## Levels: book pen pencil_case textbook

Levels-rivi tulee näkyviin, koska items (kohteet) ovat tässä istunnossa mukana. R 4.0.0:ssa ja uudemmissa versioissa sama kutsu tulostaa yksittäisen merkkijonon "book" ilman Levels-riviä.

## Select Rows 1 to 2
df[1:2,]

lähtö:

##   ID items store price
## 1 10  book  TRUE   2.5
## 2 20   pen FALSE   8.0
## Select Columns 1
df[,1]

lähtö:

## [1] 10 20 30 40

Yhden sarakkeen valitseminen df[,1]-funktiolla poistaa kehyskääreen ja palauttaa pelkän vektorin. Lisää drop = FALSE, kuten df[, 1, drop = FALSE], kun tarvitaan yksisarakkeinen datakehys.

## Select Rows 1 to 3 and columns 3 to 4
df[1:3, 3:4]

lähtö:

##   store price
## 1  TRUE   2.5
## 2 FALSE   8.0
## 3  TRUE  10.0

Sarakkeet voidaan valita myös niiden nimien perusteella. Esimerkiksi alla oleva koodi näyttäätrackaksi saraketta: ID ja store.

# Slice with columns name
df[, c('ID', 'store')]

lähtö:

##   ID store
## 1 10  TRUE
## 2 20 FALSE
## 3 30  TRUE
## 4 40 FALSE

Nimet ovat turvallisempia kuin sijainnit tuotantokoodissa, koska sarakkeen lisääminen tai uudelleenjärjestely muuttaa hiljaisesti sitä, mihin df[, 3] viittaa, kun taas df[, 'store'] osoittaa edelleen samaan dataan.

Liitä sarake tietokehykseen

Voit myös lisätä sarakkeen datakehykseen. Sinun on käytettävä symbolia $ uuden muuttujan nimeämiseen ja sarakkeen lisäämiseen datakehykseen R:ssä.

# Create a new vector
quantity <- c(10, 35, 40, 5)

# Add `quantity` to the `df` data frame
df$quantity <- quantity
df

lähtö:

##   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

Huomautus: Vektorin elementtien lukumäärän on oltava yhtä suuri kuin datakehyksen elementtien lukumäärä. Seuraavan lauseen suorittaminen sarakkeen lisäämiseksi datakehykseen R:ssä

quantity <- c(10, 35, 40)
# Add `quantity` to the `df` data frame
df$quantity <- quantity

Antaa virheen:

Error in `

lt;-.data.frame`(`*tmp*`, quantity, value = c(10, 35, 40))
replacement has 3 rows, data has 4

Viestissä nimetään datakehysten korvausoperaattori ja ilmoitetaan molemmat lukumäärät, joten se kertoo tarkalleen, mitä korjata. R kierrättää korvauksen vain, kun sen pituus jakaa rivien lukumäärän tasan, minkä vuoksi pituus-1-arvo, kuten df$currency <- 'EUR', hyväksytään, kun taas pituus-3-vektori neljää riviä vastaan ​​hylätään. cbind() lisää sarakkeen samalla tavalla, ja rbind() on sen vastine rivien lisäämiseen.

Valitse tietokehyksen sarake

Joskus meidän on tallennettava datakehyksen sarake myöhempää käyttöä varten tai suoritettava sarakkeelle toiminto. Voimme käyttää $-merkkiä valitaksemme sarakkeen datakehyksestä.

# Select the column ID
df$ID

lähtö:

## [1] 1 2 3 4

Lue tuloste huolellisesti. ID muodostettiin vektorista c(10, 20, 30, 40), joten reaaliaikainen konsoli tulostaa tässä arvon 10 20 30 40; yllä näkyvät luvut 1 2 3 4 ovat rivin sijainteja eivätkä tallennettuja arvoja. Rivin alussa oleva [1] on yksinkertaisesti rivin ensimmäisen elementin indeksi, ei osa dataa.

Kolme reittiä päätyy samaan sarakkeeseen: df$ID, df[['ID']] ja df[, 'ID']. Dollarimerkki suorittaa osittaisen täsmäyksen, joten df$I löytäisi silti ID:n, mikä on kätevää konsolissa mutta riskialtista tallennetussa skriptissä.

Alajoukko tietokehys

Edellisessä osiossa valitsimme kokonaisen sarakkeen ilman ehtoja. Onko mahdollista osajoukko sen perusteella, onko tietty ehto totta vai ei.

Käytämme subset()-funktiota.

subset(x, condition)
arguments:
- x: data frame used to perform the subset
- condition: define the conditional statement

Haluamme palauttaa vain yli 5 euron hintaiset tuotteet, joten voimme tehdä seuraavaa:

# Select price above 5
subset(df, subset = price > 5)

lähtö:

ID       items store price
2 20         pen FALSE     8
3 30    textbook  TRUE    10
4 40 pencil_case FALSE     7

Riviotsikot 2, 3 ja 4 ovat alkuperäisiä rivien nimiä, jotka on siirretty df-muuttujasta, joten näin voit päätellä, että ensimmäinen rivi suodatettiin pois. subset() hyväksyy myös select-argumentin sarakkeiden valitsemiseksi samanaikaisesti, ja vastaava sulkeissa käytetty muoto on df[df$price > 5, ]. Suluissa käytetty muoto pitää rivit, joista ehto puuttuu, poissa käytöstä, kun taas subset() poistaa ne, joten nämä kaksi eivät ole aina keskenään vaihdettavissa.

UKK

Käytä funktiota rbind(df, new_row), jossa new_row on datakehys tai lista, jossa on samat sarakkeet samassa järjestyksessä. Saraketyyppien on oltava samat, muuten R pakottaa ne. Useiden rivien kohdalla luo ensin lista ja yhdistä se kerran, koska toistuvat rbind()-kutsuja ovat hitaita.

Määritä sille NULL, kuten df$quantity <- NULL. Negatiivinen indeksointi toimii myös: df[, -3] poistaa kolmannen sarakkeen ja df[, !names(df) %in% c("store")] poistaa sarakkeet nimen mukaan riippumatta niiden sijainnista.

dim(df) palauttaa rivit ja sarakkeet yhdessä, kun taas nrow() ja ncol() palauttavat jokaisen erikseen. str(df) tulostaa jokaisen sarakkeen tyypin, summary(df) antaa sarakekohtaiset tilastot ja head(df) näyttää kuusi ensimmäistä riviä.

Indeksoi nimivektori: names(df)[2] <- "product" muuttaa vain toista otsikkoa. Jos haluat nimetä uudelleen nykyisen nimen mukaan, käytä names(df)[names(df) == "items"] <- "product", joka toimii edelleen, vaikka sarakejärjestys muuttuisi.

Tibble on tidyversen datakehys. Se ei koskaan muunna merkkijonoja tekijöiksi, ei koskaan osittain täsmää sarakenimiä, tulostaa vain kymmenen ensimmäistä riviä saraketyypeineen ja palauttaa aina tibblen, kun osajoukko on yhdellä sulkeella.

filter(df, hinta > 5) on dplyr vastaava, ja se ketjuttaa select()-, mutate()- ja arrange()-funktioiden kanssa putken kautta. Toisin kuin subset(), filter() on suunniteltu ohjelmalliseen käyttöön, joten se käyttäytyy ennustettavasti funktioiden sisällä.

Tekoälyavustajat lukevat str()- ja summary()-funktioiden tulosteen ja ehdottavat sitten tyyppimuunnoksia, puuttuvien arvojen strategioita ja sarakkeiden uudelleennimeämisiä suoritettavana koodina. He selittävät myös kryptisten korvausvirheiden esiintymisen, vaikka jokainen luotu muunnos on silti tarkistettava todellista dataa vasten.

Kyllä. GitHub Copilot juoksee sisään RStudio 2023.09.0 ja uudemmat Työkalut-valikon, Yleisten asetusten ja sitten koodin avustajan asetusten kautta. Se luonnostelee data.frame()-, subset()- ja rbind()-kutsuja kommentista, mutta sarakenimet on vahvistettava.

Tiivistä tämä viesti seuraavasti: