R okvir podataka: Kako stvoriti, dodati, odabrati i podskup

โšก Pametni saลพetak

R Data Frame pohranjuje stupce razliฤitih tipova jednake duljine, ลกto ga ฤini standardnom pravokutnom strukturom za analizu. Uglate zagrade reลพu retke i stupce, znak dolara doseลพe stupac, a subset() filtrira prema uvjetu.

  • ๐Ÿงฑ Struktura: Okvir podataka je popis vektora jednake duljine, tako da svaki stupac moลพe sadrลพavati podatke razliฤitog tipa.
  • ๐Ÿ› ๏ธ Stvaranje: data.frame(a, b, c, d) spaja ฤetiri vektora, a names() preimenuje svaki stupac nakon toga.
  • โœ‚๏ธ Rezanje: df[A, B] se ฤita kao retci, pa stupci, a prazna strana odabire sve na toj strani.
  • โž• Dodavanje: df$quantity dodjeljuje novi stupac, pod uvjetom da novi vektor toฤno odgovara broju redaka.
  • ๐Ÿ”Ž Filtriranje: podskup(df, podskup = cijena > 5) zadrลพava samo retke u kojima je uvjet ISTINA.
  • โš ๏ธ Verzija Shift: Od verzije R 4.0.0, zadana vrijednost stringsAsFactors je FALSE, pa tekstualni stupci ostaju znakovni.

R Data Frame Create, Add, Select i Subset

ล to je podatkovni okvir?

A podatkovni okvir je popis vektora jednake duljine. Matrica sadrลพi samo jednu vrstu podataka, dok podatkovni okvir prihvaฤ‡a razliฤite tipove podataka (brojฤane, znakovne, faktorske itd.).

Ta definicija smjeลกta podatkovni okvir izmeฤ‘u dva susjeda koje ฤ‡ete stalno susretati u R. A. matrica je pravokutan, ali jednog tipa, i a popis je viลกetipski, ali neravan. Okvir podataka posuฤ‘uje jedno svojstvo od svakog.

Struktura Vrste stupaca Duljine elemenata Tipiฤna upotreba
vektor Samo jedna vrsta Jedan slijed Jedna varijabla
Distributori Samo jedna vrsta Pravokutan Numeriฤka algebra
Popis Bilo koja mjeลกavina vrsta Moลพe se razlikovati po elementu Proizvoljne naplate
Okvir podataka Bilo koja mjeลกavina vrsta Svaki stupac je jednake duljine Tabliฤna analiza

Buduฤ‡i da je okvir podataka zapravo lista ispod, pristupnici koriลกteni na listama rade i ovdje, zbog ฤega se znak dolara ponovno pojavljuje kasnije u ovom vodiฤu.

Kako stvoriti podatkovni okvir

Moลพemo stvoriti podatkovni okvir u R prosljeฤ‘ivanjem varijabli a, b, c i d u funkciju data.frame(). Moลพemo stvoriti okvir podataka i imenovati stupce pomoฤ‡u names(), jednostavnim navoฤ‘enjem imena svake varijable.

data.frame(df, stringsAsFactors = TRUE)

argumenti:

  • df: To moลพe biti matrica koja se pretvara u podatkovni okvir ili zbirka varijabli za spajanje
  • stringsAsFactors: Kontrolira hoฤ‡e li vektori znakova postati stupci faktora. Tvorniฤka zadana vrijednost bila je TRUE u starijim izdanjima, a FALSE od R 4.0.0, stoga je eksplicitno proslijedite kada je ponaลกanje vaลพno.

Moลพemo stvoriti podatkovni okvir u R-u za naลก prvi skup podataka kombiniranjem ฤetiriju varijabli iste duljine.

# 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

Izlaz:

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

Svaki vektor je postao stupac, a ฤetiri vrijednosti u svakom vektoru postale su ฤetiri retka. Imajte na umu da argumenti nisu bili imenovani, pa je R izveo zaglavlja stupaca iz samih naziva varijabli.

Vidimo da zaglavlja stupaca imaju isti naziv kao i varijable. Naziv stupca u R moลพemo promijeniti pomoฤ‡u funkcije names(). Pogledajte primjer R create dataframe u nastavku:

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

Izlaz:

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

Dodjeljivanjem names() zamjenjuje se svako zaglavlje odjednom, tako da vektor zamjene mora imati toฤno jedan unos po stupcu. Za preimenovanje jednog stupca umjesto toga, indeksirajte vektor names, kao u names(df)[2] <- 'product'.

# Print the structure
str(df)

Izlaz:

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

Napomena o verziji. Gornji izlaz je proizveden na R izdanju starijem od 4.0.0, gdje je data.frame() prema zadanim postavkama pretvarao vektore znakova u faktore, zbog ฤega se items prikazuje kao Faktor s ฤetiri razine. Osnovna R dokumentacija biljeลพi da je ova tvorniฤki zadana postavka promijenjeno u stringsAsFactors = FALSE za R 4.0.0Pokretanje istog koda na trenutnoj verziji ostavlja stavke kao obiฤan stupac znakova, a str() umjesto toga ispisuje chr. Dodajte stringsAsFactors = TRUE pozivu data.frame() za reprodukciju ispisanog izlaza ili proฤitajte faktor tutorijal za kada su faktori zapravo ลพeljeni.

Slice Data Frame

Nakon ลกto je okvir izgraฤ‘en, sljedeฤ‡i zadatak je izvlaฤenje njegovih dijelova. Rezanje je osnovni R naฤin za to, a koristi iste uglate zagrade kao i vektori, samo s dvije pozicije umjesto jedne.

Moguฤ‡e je izvrลกiti SLICE vrijednosti okvira podataka. Redove i stupce za vraฤ‡anje odabiremo unutar zagrada ispred naziva okvira podataka.

Podatkovni okvir sastoji se od redaka i stupaca, df[A, B]. A predstavlja retke, a B stupce. Moลพemo rezati tako da navedemo retke i/ili stupce.

Na slici 1 ispod, lijevi dio predstavlja redovi, a desni dio je stupovi. Imajte na umu da simbol : znaฤi do. Na primjer, 1:3 namjerava odabrati vrijednosti od 1 do 3.

Sintaksa rezanja R okvira podataka df[A, B] s retcima lijevo od zareza i stupcima desno

Na donjem dijagramu prikazujemo kako pristupiti razliฤitim odabirima okvira podataka:

Obojene strelice iznad R podatkovnog okvira koje prikazuju odabire pojedinaฤnih ฤ‡elija, raspona redaka, cijelog stupca i blokova

  • ลฝuta strelica odabire red 1 u kolona 2
  • Zelena strelica odabire redaka 1 2 se
  • Crvena strelica odabire kolona 1
  • Plava strelica odabire redaka 1 do 3 i stupovi 3 4 se

Imajte na umu da, ako ostavimo lijevi dio prazan, R ฤ‡e odabrati svi redovi. Analogno tome, ako pustimo desni dio prazan, R ฤ‡e odabrati sve kolone.

Moลพemo pokrenuti kod u konzoli:

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

Izlaz:

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

Redak Levels se pojavljuje jer je items faktor u ovoj sesiji. Na R 4.0.0 i novijim verzijama isti poziv ispisuje jedan niz znakova "book" bez retka Levels.

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

Izlaz:

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

Izlaz:

## [1] 10 20 30 40

Odabirom jednog stupca s df[,1] uklanja se omotaฤ okvira i vraฤ‡a se obiฤan vektor. Dodajte drop = FALSE, kao u df[, 1, drop = FALSE], kada je umjesto toga potreban okvir podataka s jednim stupcem.

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

Izlaz:

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

Takoฤ‘er je moguฤ‡e odabrati stupce s njihovim nazivima. Na primjer, kod u nastavku, npr.tracts dva stupca: ID i pohrana.

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

Izlaz:

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

Imena su sigurnija od pozicija u produkcijskom kodu, jer umetanje ili promjena redoslijeda stupca tiho mijenja na ลกto se df[, 3] odnosi dok df[, 'store'] nastavlja pokazivati โ€‹โ€‹na iste podatke.

Dodavanje stupca u okvir podataka

Takoฤ‘er moลพete dodati stupac u okvir podataka. Morate koristiti simbol $ za imenovanje nove varijable i dodavanje stupca u okvir podataka u R-u.

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

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

Izlaz:

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

Napomena: Broj elemenata u vektoru mora biti jednak broju elemenata u podatkovnom okviru. Izvrลกavanje sljedeฤ‡e naredbe za dodavanje stupca podatkovnom okviru u R-u

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

Daje greลกku:

Error in `

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

Poruka imenuje operator zamjene za podatkovne okvire i navodi oba broja, tako da vam toฤno govori ลกto treba popraviti. R reciklira zamjenu samo kada je njezina duljina jednakomjerno podijelila broj redaka, zbog ฤega se prihvaฤ‡a vrijednost duljine 1, kao ลกto je df$currency <- 'EUR', dok se vektor duljine 3 za ฤetiri retka odbija. cbind() dodaje stupac na isti naฤin, a rbind() je njegov pandan za dodavanje redaka.

Odaberite stupac podatkovnog okvira

Ponekad trebamo pohraniti stupac podatkovnog okvira za buduฤ‡u upotrebu ili izvrลกiti operaciju na stupcu. Moลพemo koristiti znak $ za odabir stupca iz podatkovnog okvira.

# Select the column ID
df$ID

Izlaz:

## [1] 1 2 3 4

Paลพljivo proฤitajte taj izlaz. ID je izgraฤ‘en iz vektora c(10, 20, 30, 40), pa konzola ovdje ispisuje 10 20 30 40; prikazani 1 2 3 4 gore su pozicije redaka, a ne pohranjene vrijednosti. [1] na poฤetku retka je jednostavno indeks prvog elementa u tom retku, a ne dio podataka.

Tri rute doseลพu isti stupac: df$ID, df[['ID']] i df[, 'ID']. Znak dolara provodi djelomiฤno podudaranje, pa bi df$I i dalje pronaลกao ID, ลกto je praktiฤno u konzoli, a riziฤno u spremljenom skriptu.

Podskup podatkovnog okvira

U prethodnom odjeljku odabrali smo cijeli stupac bez uvjeta. Moguฤ‡e je da se podset na temelju toga je li odreฤ‘eni uvjet bio istinit ili nije.

Koristimo funkciju subset().

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

ลฝelimo vratiti samo artikle ฤija je cijena iznad 5, tako da moลพemo uฤiniti sljedeฤ‡e:

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

Izlaz:

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

Oznake redaka 2, 3 i 4 su izvorna imena redaka prenesena iz df-a, ลกto je naฤin na koji moลพete prepoznati da je prvi redak filtriran. subset() takoฤ‘er prihvaฤ‡a argument select za istovremeni odabir stupaca, a ekvivalentni oblik zagrade je df[df$price > 5, ]. Oblik zagrade zadrลพava NA retke gdje uvjet nedostaje, dok subset() ih odbacuje, tako da ta dva nisu uvijek zamjenjiva.

Pitanja i odgovori

Koristite rbind(df, new_row), gdje je new_row okvir podataka ili lista s istim stupcima u istom redoslijedu. Tipovi stupaca moraju se podudarati, inaฤe ih R prisiljava. Za viลกe redaka, prvo izgradite listu i kombinirajte jednom, jer su ponovljeni pozivi rbind() spori.

Dodijelite mu NULL, kao u df$quantity <- NULL. Negativno indeksiranje takoฤ‘er funkcionira: df[, -3] izostavlja treฤ‡i stupac, a df[, !names(df) %in% c("store")] uklanja stupce po imenu bez obzira na njihov poloลพaj.

dim(df) vraฤ‡a retke i stupce zajedno, dok nrow() i ncol() vraฤ‡aju svaki zasebno. str(df) ispisuje tip svakog stupca, summary(df) daje statistiku po stupcu, a head(df) prikazuje prvih ลกest redaka.

Indeksirajte vektor imena: names(df)[2] <- "product" mijenja samo drugi zaglavlje. Za preimenovanje po trenutnom imenu koristite names(df)[names(df) == "items"] <- "product", ลกto nastavlja raditi ฤak i nakon promjene redoslijeda stupaca.

Tibble je okvir podataka tidyversea. Nikada ne pretvara stringove u faktore, nikada djelomiฤno ne podudara nazive stupaca, ispisuje samo prvih deset redaka s tipovima stupaca i uvijek vraฤ‡a tibble kada je podskup s jednom zagradom.

filter(df, cijena > 5) je dplyr ekvivalentno, i povezuje se sa select(), mutate() i arrange() kroz cijevi. Za razliku od subset(), filter() je dizajniran za programsku upotrebu, pa se ponaลกa predvidljivo unutar funkcija.

AI asistenti ฤitaju izlaz str() i summary(), a zatim predlaลพu pretvorbe tipova, strategije za nedostajuฤ‡e vrijednosti i preimenovanja stupaca kao izvrลกni kod. Takoฤ‘er objaลกnjavaju kriptiฤne pogreลกke zamjene, iako svaku generiranu transformaciju i dalje treba provjeriti u odnosu na stvarne podatke.

Da. GitHub kopilot uleti RStudio 2023.09.0 i novije putem Alata, Globalnih opcija, a zatim postavke pomoฤ‡nika za kod. Izraฤ‘uje pozive data.frame(), subset() i rbind() iz komentara, ali nazivi stupaca moraju biti provjereni.

Saลพmite ovu objavu uz: