Ühendage andmeraamid R: täielik ja osaline vaste
Väga sageli on meil andmeid mitmest allikast. Analüüsi tegemiseks peame ühendada kaks andmekaadrit koos ühe või mitmega tavalised võtmemuutujad.
Selles õpetuses saate teada
Täielik vaste
Täielik vaste tagastab väärtused, millel on sihttabelis vaste. Väärtusi, mis ei ühti, uues andmeraamis ei tagastata. Osaline vaste tagastab aga puuduvad väärtused NA-na.
Näeme lihtsat sisemine liitumine. Siseühenduse märksõna valib kirjed, millel on mõlemas tabelis vastavad väärtused. Kahe andmekogumi ühendamiseks saame kasutada funktsiooni merge(). Kasutame kolme argumenti:
merge(x, y, by.x = x, by.y = y) Arguments: -x: The origin data frame -y: The data frame to merge -by.x: The column used for merging in x data frame. Column x to merge on -by.y: The column used for merging in y data frame. Column y to merge on
Näide:
Looge esimene muutujatega andmestik
- perekonnanimi
- kodakondsus
Looge teine muutujatega andmestik
- perekonnanimi
- Filmid
Üldine võtmemuutuja on perekonnanimi. Saame ühendada mõlemad andmed ja kontrollida, kas mõõtmed on 7 × 3.
Lisame andmeraami stringsAsFactors=FALSE, sest me ei taha R stringi teguriks teisendamiseks tahame, et muutujat käsitletaks märgina.
# Create origin dataframe(
producers <- data.frame(
surname = c("Spielberg","Scorsese","Hitchcock","Tarantino","Polanski"),
nationality = c("US","US","UK","US","Poland"),
stringsAsFactors=FALSE)
# Create destination dataframe
movies <- data.frame(
surname = c("Spielberg",
"Scorsese",
"Hitchcock",
"Hitchcock",
"Spielberg",
"Tarantino",
"Polanski"),
title = c("Super 8",
"Taxi Driver",
"Psycho",
"North by Northwest",
"Catch Me If You Can",
"Reservoir Dogs","Chinatown"),
stringsAsFactors=FALSE)
# Merge two datasets
m1 <- merge(producers, movies, by.x = "surname")
m1
dim(m1)
Väljund:
surname nationality title 1 Hitchcock UK Psycho 2 Hitchcock UK North by Northwest 3 Polanski Poland Chinatown 4 Scorsese US Taxi Driver 5 Spielberg US Super 8 6 Spielberg US Catch Me If You Can 7 Tarantino US Reservoir Dogs
Ühendame andmeraamid, kui ühistel võtmemuutujatel on erinevad nimed.
Muudame filmi andmeraamis perekonnanime nimeks. Kasutame funktsiooni identsed (x1, x2), et kontrollida, kas mõlemad andmeraamid on identsed.
# Change name of ` movies ` dataframe colnames(movies)[colnames(movies) == 'surname'] <- 'name' # Merge with different key value m2 <- merge(producers, movies, by.x = "surname", by.y = "name") # Print head of the data head(m2)
Väljund:
##surname nationality title ## 1 Hitchcock UK Psycho ## 2 Hitchcock UK North by Northwest ## 3 Polanski Poland Chinatown ## 4 Scorsese US Taxi Driver ## 5 Spielberg US Super 8 ## 6 Spielberg US Catch Me If You Can
# Check if data are identical identical(m1, m2)
Väljund:
## [1] TRUE
See näitab, et liitmine toimub isegi siis, kui veergude nimed on erinevad.
Osaline vaste
Pole üllatav, et kahel andmeraamil ei ole samu ühiseid võtmemuutujaid. Aastal täielik sobitamine, tagastab andmeraam ainult ridu, mis on leitud nii x- kui ka y-andmeraamist. Koos osaline liitmine, on võimalik sobivate ridadeta ridu hoida teises andmeraamis. Nendel ridadel on NA nendes veergudes, mis on tavaliselt täidetud y väärtustega. Seda saame teha, kui määrame kõik.x= TRUE.
Näiteks saame lisada uue produtsendi Lucase tootjaandmete kaadrisse ilma filmi viideteta filmide andmeraamis. Kui määrame all.x= FALSE, ühendab R ainult mõlema andmestiku vastavad väärtused. Meie puhul ei liitu tootja Lucas ühendamisega, kuna see puudub ühest andmekogumist.
Vaatame iga väljundi dimensiooni, kui määrame kõik.x= TRUE ja millal mitte.
# Create a new producer
add_producer <- c('Lucas', 'US')
# Append it to the ` producer` dataframe
producers <- rbind(producers, add_producer)
# Use a partial merge
m3 <-merge(producers, movies, by.x = "surname", by.y = "name", all.x = TRUE)
m3
Väljund:
# Compare the dimension of each data frame dim(m1)
Väljund:
## [1] 7 3
dim(m2)
Väljund:
## [1] 7 3
dim(m3)
Väljund:
## [1] 8 3
Nagu näeme, on uue andmeraami mõõde 8 × 3 võrreldes 7 × 3 m1 ja m2 jaoks. R sisaldab raamatute andmeraamis puuduva autori NA-d.

