Divu tabulu apvienošana

Reizēm ir nepieciešams apvienot divas tabulas balstoties uz kolonnu, kas ir kopējā visām tabulām. Piemēram izveidosim divas tabulas tab1 un tab2, kur abās tabulās ir kolonna gints, bet atšķiras otrā kolonna. Turklāt tikai viena no ģints vērtībām atkārtojas abās tabulās.

tab1 <- data.frame(gints = c("Pinus", "Picea", "Alnus"), 
                   skaits = c(5, 8, 3))
tab2 <- data.frame(gints = c("Picea", "Ulmus", "Quercus"), 
                   diametrs = c(25, 34, 67))
tab1
##   gints skaits
## 1 Pinus      5
## 2 Picea      8
## 3 Alnus      3
tab2
##     gints diametrs
## 1   Picea       25
## 2   Ulmus       34
## 3 Quercus       67

Viena no funkcijām, kuru var izmantot tabulu apvienošanai, ir funkcija merge(), kurai kā argumenti obligāti jānorāda tabulas, kuras vēlas apvienot. Ja kolonna pēc kuras vēlas veikt apvienošanu ir ar vienādu nosaukumu abās tabulas, tad to var nenorādīt (šajā gadījumā tā ir kolonna gints). Ja kolonnu nosaukumi ir atšķirīgi, tad jālieto argumenti by.x= un by.x= ar norādītiem pirmās un otrās tabulas kolonnu nosaukumiem.

Nenorādot papildus argumentus, funkcija merge() izveidos jaunu tabulu, kurā būs kolonnas no abām tabulām, bet kā rindiņas parādīsies tikai tie ieraksti, kuriem būs vērtības abās tabulās.

tab3 <- merge(tab1, tab2)
tab3
##   gints skaits diametrs
## 1 Picea      8       25

Kā papildus argumentu norādot all=TRUE, jaunajā tabulā parādīsies visas vērtības (rindiņas) no abām tabulām, tikai neesošo vērtību vietās parādīsies NA.

tab4 <- merge(tab1, tab2, all = TRUE)
tab4
##     gints skaits diametrs
## 1   Alnus      3       NA
## 2   Picea      8       25
## 3   Pinus      5       NA
## 4 Quercus     NA       67
## 5   Ulmus     NA       34

Papildus arguments all.x=TRUE nodrošinās to, ka jaunājā tabulā būs tikai tās vērtības (rindiņas), kas bija pirmajā tabulā, bet no otrās tabulas tiks pievienotas atbilstošo kolonnu vērtības pirmās tabulas rindiņām.

tab5 <- merge(tab1, tab2, all.x = TRUE)
tab5
##   gints skaits diametrs
## 1 Alnus      3       NA
## 2 Picea      8       25
## 3 Pinus      5       NA

Ar argumentu all.y=TRUE panāk pretēju efektu iepriekšējam piemēram.

tab6 <- merge(tab1, tab2, all.y = TRUE)
tab6
##     gints skaits diametrs
## 1   Picea      8       25
## 2 Quercus     NA       67
## 3   Ulmus     NA       34
Didzis Elferts
Didzis Elferts
Datu zinātnieks, vadošais pētnieks

Manas zinātniskās intereses saistītas ar statistiku un programmu R.