Cum să combinați două cadre de date în R cu coloane diferite folosind Base R, dplyr și data.table

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

Combinarea cadrelor de date este o sarcină fundamentală în analiza datelor, în special atunci când avem de-a face cu seturi de date care au structuri diferite. În R, există mai multe modalități de a realiza acest lucru, folosind funcțiile de bază R, the dplyr pachet, iar data.table pachet. Acest ghid vă va ghida prin fiecare metodă, oferind exemple și explicații potrivite pentru programatorii R începători. Acest articol va explora trei metode principale în R: funcții de bază R, dplyrși data.table. Fiecare metodă are avantajele sale, iar înțelegerea acestora vă va îmbunătăți abilitățile de manipulare a datelor.

Cadrele de date sunt structuri bidimensionale, asemănătoare unui tabel în R, în care fiecare coloană poate conține diferite tipuri de date. Sunt similare cu tabelele dintr-o bază de date sau cu foile de calcul Excel.

Folosind merge()

The merge() funcția este un instrument versatil în baza R pentru combinarea cadrelor de date. Vă permite să specificați coloanele pe care să le îmbinați și să gestionați cu grație diferite nume de coloane.

# Example data frames
df1 <- data.frame(ID = 1:3, Name = c("Alice", "Bob", "Charlie"))
df2 <- data.frame(ID = 2:4, Age = c(25, 30, 35))

# Merging data frames
merged_df <- merge(df1, df2, by = "ID", all = TRUE)
print(merged_df)
  ID    Name Age
1  1   Alice  NA
2  2     Bob  25
3  3 Charlie  30
4  4      35

Folosind cbind() şi rbind()

Aceste funcții sunt folosite pentru a combina cadre de date pe coloane sau, respectiv, rânduri. Cu toate acestea, ele necesită ca cadrele de date să aibă același număr de rânduri sau coloane. Nota: Numele coloanelor trebuie să se potrivească atunci când se utilizează rbind().

# Column binding
cbind_df <- cbind(df1, df2)
print(cbind_df)
  ID    Name ID Age
1  1   Alice  2  25
2  2     Bob  3  30
3  3 Charlie  4  35
# Row binding; this will fail because the names of the columns are not the same
# So to ensure the below words we must fix the names, this though, makes no
# sense as we see below
df3 <- df2
colnames(df3) <- names(df1)
rbind(df1, df3)
  ID    Name
1  1   Alice
2  2     Bob
3  3 Charlie
4  2      25
5  3      30
6  4      35

The dplyr pachetul oferă o sintaxă mai intuitivă pentru manipularea datelor.

Folosind bind_rows()

bind_rows() este folosit pentru a combina cadre de date pe rânduri, completând coloanele lipsă cu NA.

library(dplyr)

# Using bind_rows
combined_df <- bind_rows(df1, df2)
print(combined_df)
  ID    Name Age
1  1   Alice  NA
2  2     Bob  NA
3  3 Charlie  NA
4  2      25
5  3      30
6  4      35

Folosind full_join()

full_join() combină cadre de date pe coloane, similar cu îmbinarea exterioară completă SQL.

# Using full_join
full_joined_df <- full_join(df1, df2, by = "ID")
print(full_joined_df)
  ID    Name Age
1  1   Alice  NA
2  2     Bob  25
3  3 Charlie  30
4  4      35

The data.table pachetul este cunoscut pentru viteza și eficiența sa cu seturi mari de date.

Folosind rbindlist()

rbindlist() este o modalitate rapidă de a combina liste de cadre de date pe rânduri.

library(data.table)

# Using rbindlist
dt1 <- data.table(ID = 1:3, Name = c("Alice", "Bob", "Charlie"))
dt2 <- data.table(ID = 2:4, Age = c(25, 30, 35))

combined_dt <- rbindlist(list(dt1, dt2), fill = TRUE)
print(combined_dt)
      ID    Name   Age
      
1:     1   Alice    NA
2:     2     Bob    NA
3:     3 Charlie    NA
4:     2        25
5:     3        30
6:     4        35

The merge() functioneaza in data.table este similar cu baza R, dar optimizat pentru performanță.

# Using data.table merge
merged_dt <- merge(dt1, dt2, by = "ID", all = TRUE)
print(merged_dt)
Key: 
      ID    Name   Age
      
1:     1   Alice    NA
2:     2     Bob    25
3:     3 Charlie    30
4:     4        35

La combinarea cadrelor de date cu coloane diferite, valorile lipsă (NA) sunt inevitabile. Este esențial să le gestionați în mod corespunzător, în funcție de nevoile dvs. de analiză.

Să explorăm un exemplu practic în care combinăm vânzările și datele clienților.

# Sales data
sales <- data.frame(CustomerID = c(1, 2, 3), SalesAmount = c(100, 150, 200))

# Customer data
customers <- data.frame(CustomerID = c(2, 3, 4), CustomerName = c("John", "Doe", "Smith"))

# Full join using dplyr
full_data <- full_join(sales, customers, by = "CustomerID")
print(full_data)
  CustomerID SalesAmount CustomerName
1          1         100         
2          2         150         John
3          3         200          Doe
4          4          NA        Smith
  • Numele coloanelor nu se potrivesc: Asigurați-vă că numele coloanelor se potrivesc atunci când utilizați funcții care le necesită.
  • Diferite tipuri de date: convertiți coloanele în același tip de date înainte de îmbinare.
  • Seturi mari de date: Folosește data.table pentru o performanță mai bună cu seturi de date mari.

Combinarea cadrelor de date cu coloane diferite în R se poate face eficient folosind baza R, dplyrsau data.table. Fiecare metodă are punctele sale forte, iar alegerea celei potrivite depinde de nevoile dvs. specifice și de dimensiunea setului de date.

Î1: Pot combina cadre de date cu numere de rând diferite? Da, funcționează ca bind_rows() şi rbindlist() gestionați diferite numere de rând prin completarea valorilor lipsă cu NA.

Î2: Care este cea mai bună metodă pentru seturi mari de date? The data.table pachetul este recomandat pentru seturi mari de date datorită vitezei și eficienței sale.

Î3: Cum gestionez rândurile duplicate după îmbinare? Utilizați distinct() functia de la dplyr pentru a elimina duplicatele.

Î4: Pot îmbina pe mai multe coloane? Da, specificați mai multe coloane în by argument de merge() sau full_join().

Î5: Ce se întâmplă dacă cadrele mele de date nu au coloane comune? Utilizare cbind() sau bind_cols() să le combinați una lângă alta, dar asigurați-vă că au același număr de rânduri.

Acum că ați învățat despre diferite metode de combinare a cadrelor de date în R, este timpul să vă puneți cunoștințele în practică. Iată câteva exerciții care vă vor ajuta să vă întăriți înțelegerea:

  1. Creați-vă propriile cadre de date

Începeți prin a crea două cadre de date cu coloane diferite. De exemplu:

# Create your own data frames
df_employees <- data.frame(
  EmployeeID = 1:5,
  Name = c("Alice", "Bob", "Charlie", "David", "Eva"),
  Department = c("Sales", "IT", "HR", "Marketing", "Finance")
)

df_salaries <- data.frame(
  EmployeeID = c(2, 4, 5, 6, 7),
  Salary = c(50000, 60000, 55000, 65000, 70000)
)
  1. Încercați diferite metode de combinare

Utilizați fiecare dintre metodele pe care le-am discutat pentru a combina aceste cadre de date: – Folosiți R de bază merge() – Foloseste dplyrlui full_join() – Foloseste data.tablelui merge()

Comparați rezultatele și notați eventualele diferențe.

  1. Gestionați valorile lipsă

După combinarea cadrelor de date, este posibil ca unor angajați să lipsească informații despre salariu, iar unele înregistrări ale salariului ar putea să nu aibă detaliile corespunzătoare ale angajaților. Încercați să: – Identificați care angajați le lipsesc informații despre salariu – Aflați dacă există înregistrări de salariu fără detalii despre angajat

  1. Creați un rezumat

Folosind cadrul de date combinat: – Calculați salariul mediu pe departament – Găsiți cel mai bine plătit angajat din fiecare departament

  1. Provocare: mai multe surse de date

Creați un al treilea cadru de date cu evaluări de performanță:

df_performance <- data.frame(
  EmployeeID = c(1, 3, 5, 7),
  Rating = c("Excellent", "Good", "Very Good", "Outstanding")
)

Acum, combinați toate cele trei cadre de date într-un singur set de date cuprinzător pentru angajați.

  1. Vizualizarea

Folosind setul de date combinat din provocare: – Creați un grafic de dispersie a salariului față de evaluarea performanței – Realizați un grafic cu bare care să arate salariul mediu pe departament

Amintiți-vă, practica este cheia pentru a stăpâni aceste concepte. Nu ezitați să experimentați cu diferite funcții și parametri. Dacă întâmpinați erori, încercați să înțelegeți de ce au apărut acestea și cum să le rezolvați.

Puteți vizualiza și vă alăturați canalului meu Telegram aici: https://t.me/steveondata

Combinarea datelor

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.