Gabungkan Bingkai Data di R: Pencocokan Penuh dan Sebagian

Seringkali, kami memiliki data dari berbagai sumber. Untuk melakukan analisis, kita perlu bergabung dua kerangka data bersama dengan satu atau lebih variabel kunci umum.

Dalam tutorial ini, Anda akan belajar

Pertandingan penuh

Pencocokan penuh mengembalikan nilai yang memiliki pasangannya di tabel tujuan. Nilai yang tidak cocok tidak akan dikembalikan dalam bingkai data baru. Namun, pencocokan parsial mengembalikan nilai yang hilang sebagai NA.

Kita akan melihat yang sederhana bergabung dalam. Kata kunci inner join memilih rekaman yang memiliki nilai yang cocok di kedua tabel. Untuk menggabungkan dua dataset, kita dapat menggunakan fungsi merge(). Kami akan menggunakan tiga argumen:

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

Contoh:

Buat Kumpulan Data Pertama dengan variabel

  • nama keluarga
  • kebangsaan

Buat Kumpulan Data Kedua dengan variabel

  • nama keluarga
  • bioskop

Variabel kunci umum adalah nama keluarga. Kita dapat menggabungkan kedua data dan memeriksa apakah dimensinya 7ร—3.

Kami menambahkan stringsAsFactors=FALSE dalam bingkai data karena kami tidak menginginkannya R untuk mengonversi string sebagai faktor, kami ingin variabel diperlakukan sebagai karakter.

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

Keluaran:

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

Mari gabungkan bingkai data ketika variabel kunci umum memiliki nama berbeda.

Kami mengubah nama keluarga menjadi nama dalam bingkai data film. Kami menggunakan fungsi identik (x1, x2) untuk memeriksa apakah kedua kerangka data identik.

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

Keluaran:

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

Keluaran:

## [1] TRUE

Ini menunjukkan bahwa operasi penggabungan dilakukan meskipun nama kolom berbeda.

Pertandingan sebagian

Tidak mengherankan jika dua kerangka data tidak memiliki variabel kunci yang sama. Dalam pencocokan penuh, kerangka data kembali hanya baris ditemukan di bingkai data x dan y. Dengan penggabungan sebagian, dimungkinkan untuk menyimpan baris tanpa baris yang cocok di bingkai data lainnya. Baris-baris ini akan memiliki NA di kolom-kolom yang biasanya diisi dengan nilai-nilai dari y. Kita dapat melakukannya dengan menyetel all.x= TRUE.

Misalnya, kita dapat menambahkan produser baru, Lucas, di bingkai data produser tanpa referensi film di bingkai data film. Jika kita menyetel all.x= FALSE, R hanya akan menggabungkan nilai yang cocok di kedua kumpulan data. Dalam kasus kami, produser Lucas tidak akan bergabung dalam penggabungan karena hilang dari satu kumpulan data.

Mari kita lihat dimensi setiap keluaran ketika kita menentukan all.x= TRUE dan ketika tidak.

# 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

Keluaran:

Pertandingan Parsial

# Compare the dimension of each data frame
dim(m1)

Keluaran:

## [1] 7 3
dim(m2)

Keluaran:

## [1] 7 3
dim(m3)

Keluaran:

## [1] 8 3

Seperti yang bisa kita lihat, dimensi bingkai data baru adalah 8ร—3 dibandingkan dengan 7ร—3 untuk m1 dan m2. R menyertakan NA untuk penulis yang hilang dalam kerangka data buku.

Ringkaslah postingan ini dengan: