Како креирати ДатаФраме у Р да бисте чували податке на организован начин

Data frejmovi predstavljaju osnovnu strukturu podataka u programskom jeziku R, pružajući organizaciju, fleksibilnost i alate neophodne za analizu i obradu podataka. Njihova važnost proteže se na različite oblasti, uključujući statistiku, nauku o podacima i donošenje odluka zasnovanih na podacima u različitim industrijama.

Data frejmovi obezbeđuju strukturu i organizaciju potrebnu za otkrivanje uvida i donošenje odluka na osnovu podataka na sistematičan i efikasan način.

U programskom jeziku R, data frejmovi su organizovani kao tabele, sa redovima i kolonama. Svaki red predstavlja pojedinačno posmatranje, dok svaka kolona predstavlja varijablu. Ova struktura olakšava organizaciju i rad sa podacima. Data frejmovi mogu sadržati različite tipove podataka, uključujući numeričke vrednosti, tekstualne podatke i datume, što ih čini veoma prilagodljivim.

U ovom članku, objasniću važnost data frejmova i demonstrirati kako se kreiraju pomoću funkcije data.frame().

Pored toga, istražićemo metode za manipulaciju podacima, pokrićemo kako kreirati data frejmove iz CSV i Excel datoteka, konvertovati druge strukture podataka u data frejmove, i koristiti tibble biblioteku.

Evo nekoliko ključnih razloga zašto su data frejmovi od suštinskog značaja u jeziku R:

Važnost data frejmova

  • Skladištenje strukturiranih podataka: Data frejmovi pružaju strukturiran i tabelarni način skladištenja podataka, slično tabeli u bazi podataka. Ovaj format pojednostavljuje upravljanje i organizaciju podataka.
  • Mogućnost mešanja tipova podataka: Data frejmovi mogu da sadrže različite tipove podataka unutar iste strukture. Možete imati kolone sa numeričkim vrednostima, nizovima karaktera, faktorima, datumima i drugim tipovima podataka. Ova svestranost je ključna kada se radi sa podacima iz stvarnog sveta.
  • Organizacija podataka: Svaka kolona u data frejmu predstavlja varijablu, dok svaki red predstavlja posmatranje ili slučaj. Ovakav strukturirani izgled olakšava razumevanje organizacije podataka i poboljšava njihovu jasnoću.
  • Uvoz i izvoz podataka: Data frejmovi podržavaju jednostavan uvoz i izvoz podataka iz različitih formata datoteka, kao što su CSV, Excel i baze podataka. Ova funkcionalnost pojednostavljuje proces rada sa eksternim izvorima podataka.
  • Interoperabilnost: Data frejmovi su široko podržani od strane R paketa i funkcija, obezbeđujući kompatibilnost sa drugim alatima i bibliotekama za statistiku i analizu podataka. Ova interoperabilnost omogućava besprekornu integraciju u R ekosistem.
  • Manipulacija podacima: R nudi bogat ekosistem paketa, pri čemu je dplyr odličan primer. Ovi paketi olakšavaju filtriranje, transformaciju i sumiranje podataka koristeći data frejmove. Ova mogućnost je ključna za čišćenje i pripremu podataka.
  • Statistička analiza: Data frejmovi su standardni format podataka za mnoge statističke funkcije i funkcije analize podataka u R. Možete efikasno izvršiti regresiju, testiranje hipoteza i mnoge druge statističke analize koristeći data frejmove.
  • Vizualizacija: R paketi za vizualizaciju podataka, kao što je ggplot2, besprekorno rade sa data frejmovima. Ovo olakšava kreiranje informativnih grafikona i dijagrama za istraživanje podataka i komunikaciju rezultata.
  • Istraživanje podataka: Data frejmovi olakšavaju istraživanje podataka putem sumarne statistike, vizualizacije i drugih analitičkih metoda. Ovo pomaže analitičarima i naučnicima da razumeju karakteristike podataka i otkriju obrasce ili odstupanja.

Kako kreirati data frejm u R

Postoji nekoliko načina za kreiranje data frejma u R. Evo nekih od najčešćih metoda:

#1. Korišćenje funkcije data.frame().

# Učitavanje neophodne biblioteke ako nije već učitana
if (!require("dplyr")) {
  install.packages("dplyr")
  library(dplyr)
}

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

# Postavljanje semena za ponovljivost
set.seed(42)

# Kreiranje data frejma sa podacima o prodaji, uključujući stvarne nazive proizvoda
sales_data <- data.frame(
  OrderID = 1001:1010,
  Product = c("Laptop", "Smartphone", "Tablet", "Headphones", "Camera", "TV", "Printer", "Washing Machine", "Refrigerator", "Microwave Oven"),
  Quantity = sample(1:10, 10, replace = TRUE),
  Price = round(runif(10, 100, 2000), 2),
  Discount = round(runif(10, 0, 0.3), 2),
  Date = sample(seq(as.Date('2023-01-01'), as.Date('2023-01-10'), by="days"), 10)
)

# Prikazivanje data frejma sa podacima o prodaji
print(sales_data)

Da razjasnimo šta ovaj kod radi:

  • Prvo, proverava da li je biblioteka „dplyr“ dostupna u R okruženju.
  • Ako „dplyr“ nije dostupan, instalira i učitava biblioteku.
  • Zatim postavlja nasumično seme radi ponovljivosti.
  • Nakon toga, kreira data frejm sa podacima o prodaji, koristeći naše definisane podatke.
  • Konačno, prikazuje data frejm sa podacima o prodaji u konzoli radi pregleda.
  • sales_data frejm

    Ovo je jedan od najjednostavnijih načina za kreiranje data frejma u R. Takođe ćemo istražiti kako izdvojiti, dodati, izbrisati i selektovati određene kolone ili redove, kao i kako sumirati podatke.

    Izdvoj kolone

    Postoje dva načina za izdvajanje kolona koje su nam potrebne iz našeg data frejma:

    • Za preuzimanje poslednje tri kolone iz data frejma u R, možete koristiti indeksiranje.
    • Možete izdvojiti kolone iz data frejma pomoću operatora $ kada želite pristup pojedinačnim kolonama po imenu.

    Prikazaćemo oba načina zajedno kako bismo uštedeli vreme:

    # Izdvajanje poslednje tri kolone (Discount, Price i Date) iz sales_data data frejma
    last_three_columns <- sales_data[, c("Discount", "Price", "Date")]
    
    # Prikazivanje izdvojenih kolona
    print(last_three_columns)
    
    ############################################# ILI #########################################################
    
    # Izdvajanje poslednje tri kolone (Discount, Price i Date) koristeći operator $
    discount_column <- sales_data$Discount
    price_column <- sales_data$Price
    date_column <- sales_data$Date
    
    # Kreiranje novog data frejma sa izdvojenim kolonama
    last_three_columns <- data.frame(Discount = discount_column, Price = price_column, Date = date_column)
    
    # Prikazivanje izdvojenih kolona
    print(last_three_columns)
    
    

    Možete izdvojiti kolone koje su vam potrebne koristeći bilo koji od ovih kodova.

    Možete izdvojiti redove iz data frejma u R koristeći različite metode. Evo jednostavnog načina da to uradite:

    # Izdvajanje određenih redova (redovi 3, 6 i 9) iz last_three_columns data frejma
    selected_rows <- last_three_columns[c(3, 6, 9), ]
    
    # Prikazivanje odabranih redova
    print(selected_rows)
    

    Možete koristiti i određene uslove:

    # Izdvajanje i organizovanje redova koji zadovoljavaju određene uslove
    selected_rows <- sales_data %>%
      filter(Discount < 0.3, Price > 100, format(Date, "%Y-%m") == "2023-01") %>%
      arrange(OrderID) %>%
      select(Discount, Price, Date)
    
    # Prikazivanje odabranih redova
    print(selected_rows)
    

    Izdvojeni redovi

    Dodaj novi red

    Da biste dodali novi red u postojeći data frejm u R, možete koristiti funkciju rbind():

    # Kreiranje novog reda kao data frejma
    new_row <- data.frame(
      OrderID = 1011,
      Product = "Coffee Maker",
      Quantity = 2,
      Price = 75.99,
      Discount = 0.1,
      Date = as.Date("2023-01-12")
    )
    
    # Korišćenje funkcije rbind() za dodavanje novog reda u data frejm
    sales_data <- rbind(sales_data, new_row)
    
    # Prikazivanje ažuriranog data frejma
    print(sales_data)
    

    Dodat je novi red

    Dodaj novu kolonu

    Možete dodati kolone u svoj data frejm pomoću jednostavnog koda. Ovde želim da dodam kolonu „Način plaćanja“ u svoje podatke.

    # Kreiranje nove kolone "PaymentMethod" sa vrednostima za svaki red
    sales_data$PaymentMethod <- c("Credit Card", "PayPal", "Cash", "Credit Card", "Cash", "PayPal", "Cash", "Credit Card", "Credit Card", "Cash", "Credit Card")
    # Prikazivanje ažuriranog data frejma
    print(sales_data)
    

    Kolona je dodata u data frejm

    Izbriši redove

    Ako želite da izbrišete nepotrebne redove, ova metoda može biti od pomoći:

    # Identifikovanje reda koji treba izbrisati na osnovu njegovog OrderID
    row_to_delete <- sales_data$OrderID == 1010
    
    # Korišćenje identifikovanog reda za njegovo isključivanje i kreiranje novog data frejma
    sales_data <- sales_data[!row_to_delete, ]
    
    # Prikazivanje ažuriranog data frejma bez izbrisanog reda
    print(sales_data)
    

    Izbriši kolone

    Možete izbrisati kolonu iz data frejma u R koristeći paket dplyr.

    # install.packages("dplyr")
    library(dplyr)
    
    # Uklanjanje kolone "Discount" pomoću funkcije select()
    sales_data <- sales_data %>% select(-Discount)
    
    # Prikazivanje ažuriranog data frejma bez kolone "Discount"
    print(sales_data)
    

    Dobijte sažetak

    Da biste dobili sažetak svojih podataka u R, možete koristiti funkciju summary(). Ova funkcija pruža brz pregled centralnih tendencija i distribucije numeričkih varijabli u vašim podacima.

    # Dobijanje sažetka podataka
    data_summary <- summary(sales_data)
    
    # Prikazivanje sažetka
    print(data_summary)
    

    Ovo je nekoliko koraka koje možete pratiti za manipulaciju podacima u data frejmu.

    Pređimo na drugu metodu za kreiranje data frejma.

    #2. Napravite R data frejm iz CSV datoteke

    Da biste kreirali R data frejm iz CSV datoteke, možete koristiti funkciju read.csv().

    # Učitavanje CSV datoteke u data frejm
    df <- read.csv("my_data.csv")
    
    # Prikazivanje prvih nekoliko redova data frejma
    head(df)
    

    Ova funkcija čita podatke iz CSV datoteke i konvertuje ih u data frejm. Zatim možete raditi sa podacima u R po potrebi.

    # Instaliranje i učitavanje readr paketa ako već nije instaliran
    if (!requireNamespace("readr", quietly = TRUE)) {
      install.packages("readr")
    }
    library(readr)
    
    # Učitavanje CSV datoteke u data frejm
    df <- read_csv("data.csv")
    
    # Prikazivanje prvih nekoliko redova data frejma
    head(df)
    

    Možete koristiti i readr paket za čitanje CSV datoteke u R. Funkcija read_csv() iz readr paketa se često koristi u tu svrhu. Obično je brža od standardne metode.

    #3. Korišćenje funkcije as.data.frame().

    Možete kreirati data frejm u R koristeći funkciju as.data.frame(). Ova funkcija vam omogućava da konvertujete druge strukture podataka, kao što su matrice ili liste, u data frejm.

    Evo kako je možete koristiti:

    # Kreiranje ugnježđene liste koja predstavlja podatke
    data_list <- list(
      OrderID = 1001:1011,
      Product = c("Laptop", "Smartphone", "Tablet", "Headphones", "Camera", "TV", "Printer", "Washing Machine", "Refrigerator", "Microwave Oven", "Coffee Maker"),
      Quantity = c(1, 5, 1, 9, 10, 4, 2, 10, 1, 8, 2),
      Price = c(1875.88, 585.31, 978.36, 1886.03, 1958.63, 323.23, 1002.49, 1164.63, 1817.66, 363.55, 75.99),
      Discount = c(0.3, 0.28, 0.02, 0.15, 0.12, 0.27, 0.13, 0.25, 0.22, 0.24, 0.1),
      Date = as.Date(c("2023-01-08", "2023-01-03", "2023-01-02", "2023-01-01", "2023-01-10", "2023-01-09", "2023-01-05", "2023-01-06", "2023-01-04", "2023-01-07", "2023-01-12")),
      PaymentMethod = c("Credit Card", "PayPal", "Cash", "Credit Card", "Cash", "PayPal", "Cash", "Credit Card", "Credit Card", "Cash", "Credit Card")
    )
    
    # Konvertovanje ugnježđene liste u data frejm
    sales_data <- as.data.frame(data_list)
    
    # Prikazivanje data frejma
    print(sales_data)
    

    sales_data

    Ova metoda vam omogućava da kreirate data frejm bez navođenja svake kolone pojedinačno, i posebno je korisna kada imate veliku količinu podataka.

    #4. Iz postojećeg data frejma

    Da biste kreirali novi data frejm biranjem određenih kolona ili redova iz postojećeg data frejma u R, možete koristiti uglaste zagrade [] za indeksiranje. Evo kako to funkcioniše:

    # Selektovanje redova i kolona
    sales_subset <- sales_data[c(1, 3, 4), c("Product", "Quantity")]
    
    # Prikazivanje odabranog podskupa
    print(sales_subset)
    

    U ovom kodu kreiramo novi data frejm koji se zove sales_subset, koji sadrži određene redove (1, 3 i 4) i određene kolone („Product“ i „Quantity“) iz sales_data.

    Možete prilagoditi indekse i imena redova i kolona kako biste odabrali podatke koji su vam potrebni.

    sales_subset

    #5. Iz vektora

    Vektor je jednodimenzionalna struktura podataka u R koja se sastoji od elemenata istog tipa podataka, uključujući logičke, celobrojne, dvostruke, karakterne, kompleksne ili sirove vrednosti.

    Sa druge strane, R data frejm je dvodimenzionalna struktura dizajnirana za skladištenje podataka u tabelarnom formatu sa redovima i kolonama. Postoje različite metode za kreiranje R data frejma iz vektora, a jedan takav primer je dat u nastavku.

    # Kreiranje vektora za svaku kolonu
    OrderID <- 1001:1011
    Product <- c("Laptop", "Smartphone", "Tablet", "Headphones", "Camera", "TV", "Printer", "Washing Machine", "Refrigerator", "Microwave Oven", "Coffee Maker")
    Quantity <- c(1, 5, 1, 9, 10, 4, 2, 10, 1, 8, 2)
    Price <- c(1875.88, 585.31, 978.36, 1886.03, 1958.63, 323.23, 1002.49, 1164.63, 1817.66, 363.55, 75.99)
    Discount <- c(0.3, 0.28, 0.02, 0.15, 0.12, 0.27, 0.13, 0.25, 0.22, 0.24, 0.1)
    Date <- as.Date(c("2023-01-08", "2023-01-03", "2023-01-02", "2023-01-01", "2023-01-10", "2023-01-09", "2023-01-05", "2023-01-06", "2023-01-04", "2023-01-07", "2023-01-12"))
    PaymentMethod <- c("Credit Card", "PayPal", "Cash", "Credit Card", "Cash", "PayPal", "Cash", "Credit Card", "Credit Card", "Cash", "Credit Card")
    
    # Kreiranje data frejma pomoću data.frame()
    sales_data <- data.frame(
      OrderID = OrderID,
      Product = Product,
      Quantity = Quantity,
      Price = Price,
      Discount = Discount,
      Date = Date,
      PaymentMethod = PaymentMethod
    )
    
    # Prikazivanje data frejma
    print(sales_data)
    

    U ovom kodu, kreiramo odvojene vektore za svaku kolonu, a zatim koristimo funkciju data.frame() za kombinovanje ovih vektora u data frejm nazvan sales_data.

    Ovo vam omogućava da kreirate strukturiran tabelarni data frejm od pojedinačnih vektora u R.

    #6. Iz Excel datoteke

    Da biste kreirali data frejm uvozom Excel datoteke u R, možete koristiti pakete treće strane kao što je readxl jer osnovni R ne nudi podršku za čitanje CSV datoteka. Jedna takva funkcija za čitanje Excel datoteka je read_excel().

    # Učitavanje readxl biblioteke
    library(readxl)
    
    # Definicija putanje do Excel datoteke
    excel_file_path <- "your_file.xlsx"  # Zamenite sa stvarnom putanjom do datoteke
    
    # Čitanje Excel datoteke i kreiranje data frejma
    data_frame_from_excel <- read_excel(excel_file_path)
    
    # Prikazivanje data frejma
    print(data_frame_from_excel)
    

    Ovaj kod će učitati Excel datoteku i skladištiti njene podatke u R data frejm, omogućavajući vam da radite sa podacima u svom R okruženju.

    #7. Iz tekstualne datoteke

    Možete koristiti funkciju read.table() u R da biste uvezli tekstualnu datoteku u data frejm. Ova funkcija zahteva dva bitna parametra: ime datoteke koju želite da pročitate i graničnik koji definiše kako su polja u datoteci razdvojena.

    # Definicija naziva datoteke i graničnika
    file_name <- "your_text_file.txt"  # Zamenite sa stvarnim imenom datoteke
    delimiter <- "\t"  # Zamenite sa stvarnim graničnikom (npr., "\t" za tabulator, "," za CSV)
    
    # Korišćenje funkcije read.table() za kreiranje data frejma
    data_frame_from_text <- read.table(file_name, header = TRUE, sep = delimiter)
    
    # Prikazivanje data frejma
    print(data_frame_from_text)
    

    Ovaj kod će učitati tekstualnu datoteku i kreirati je u R, čineći je dostupnom za analizu podataka u vašem R okruženju.

    #8. Korišćenje tibble

    Da biste kreirali data frejm pomoću obezbeđenih vektora i koristili tidyverse biblioteku, možete pratiti ove korake:

    # Učitavanje tidyverse biblioteke
    library(tidyverse)
    
    # Kreiranje tibble pomoću obezbeđenih vektora
    sales_data <- tibble(
      OrderID = 1001:1011,
      Product = c("Laptop", "Smartphone", "Tablet", "Headphones", "Camera", "TV", "Printer", "Washing Machine", "Refrigerator", "Microwave Oven", "Coffee Maker"),
      Quantity = c(1, 5, 1, 9, 10, 4, 2, 10, 1, 8, 2),
      Price = c(1875.88, 585.31, 978.36, 1886.03, 1958.63, 323.23, 1002.49, 1164.63, 1817.66, 363.55, 75.99),
      Discount = c(0.3, 0.28, 0.02, 0.15, 0.12, 0.27, 0.13, 0.25, 0.22, 0.24, 0.1),
      Date = as.Date(c("2023-01-08", "2023-01-03", "2023-01-02", "2023-01-01", "2023-01-10", "2023-01-09", "2023-01-05", "2023-01-06", "2023-01-04", "2023-01-07", "2023-01-12")),
      PaymentMethod = c("Credit Card", "PayPal", "Cash", "Credit Card", "Cash", "PayPal", "Cash", "Credit Card", "Credit Card", "Cash", "Credit Card")
    )
    
    # Prikazivanje kreiranog tibble sa podacima o prodaji
    print(sales_data)
    

    Ovaj kod koristi funkciju tibble() iz tidyverse biblioteke da kreira tibble data frejm nazvan sales_data. Tibble format pruža informativniji ispis u poređenju sa standardnim R data frejmom, kao što ste napomenuli.

    Kako efikasno koristiti data frejmove u R

    Efikasno korišćenje data frejmova u R je ključno za manipulaciju i analizu podataka. Data frejmovi su osnovna struktura podataka u R, i obično se kreiraju i njima se manipuliše pomoću funkcije data.frame. Evo nekoliko saveta za efikasan rad sa data frejmovima:

    • Pre kreiranja, uverite se da su vaši podaci čisti i dobro strukturirani. Uklonite sve nepotrebne redove ili kolone, rukujte nedostajućim vrednostima i uverite se da su tipovi podataka odgovarajući.
    • Podesite odgovarajuće tipove podataka za svoje kolone (npr., numerički, karakter, faktor, datum). Ovo može poboljšati upotrebu memorije i brzinu obrade.
    • Koristite indeksiranje i podskupove za rad sa manjim delovima podataka. subset() i [] operatori su korisni za ovu svrhu.
    • Dok attach() i detach() mogu biti praktični, oni takođe mogu dovesti do dvosmislenosti i neočekivanog ponašanja.
    • R je visoko optimizovan za vektorizovane operacije. Kad god je moguće, koristite vektorizovane funkcije umesto petlji za manipulaciju podacima.
    • Ugnježdene petlje mogu biti spore u R. Umesto ugnježdenih petlji, pokušajte da koristite vektorizovane operacije ili primenite funkcije kao što su lapply ili sapply.
    • Veliki data frejmovi mogu zauzeti mnogo memorije. Razmislite o korišćenju paketa data.table ili dtplyr, koji su efikasniji po pitanju memorije za veće skupove podataka.
    • R ima širok spektar paketa za manipulaciju podacima. Koristite pakete kao što su dplyr, tidyr i data.table za efikasne transformacije podataka.
    • Smanjite upotrebu globalnih promenljivih, posebno kada radite sa više data frejmova. Koristite funkcije i prosleđujte data frejmove kao argumente.
    • Kada radite sa agregiranim podacima, koristite funkcije group_by() i summarise() u dplyr-u da biste efikasno izvršili proračune.
    • Za velike skupove podataka, razmislite o korišćenju paralelne obrade sa paketima kao što su parallel ili foreach da biste ubrzali operacije.
    • Kada učitavate podatke u R, koristite funkcije kao što su readr ili data.table::fread umesto osnovnih R funkcija kao što je read.csv za brži uvoz podataka.
    • Za veoma velike skupove podataka, razmislite o korišćenju sistema baza podataka ili specijalizovanih formata za skladištenje kao što su Feather, Arrow ili Parquet.

    Prateći ove najbolje prakse, možete efikasno raditi sa data frejmovima u R, čineći svoje zadatke manipulacije podacima i analize lakšim i bržim.

    Zaključne misli

    Kreiranje data frejmova u R je jednostavno, a na raspolaganju su vam različite metode. Naglasio sam važnost data frejmova i demonstrirao kako se kreiraju pomoću funkcije data.frame().

    Pored toga, istražili smo metode za manipulaciju podacima i pokrili kako da