R yra programavimo kalba ir programinės įrangos aplinka, kuri pirmiausia naudojama statistiniams skaičiavimams ir grafikai. Jame pateikiamas platus duomenų apdorojimo, duomenų analizės, duomenų vizualizavimo ir statistinio modeliavimo įrankių pasirinkimas.
Duomenų sujungimas yra duomenų analizės ir duomenų apdorojimo užduotis. R yra įvairių būdų, kaip sujungti duomenų rėmelius, naudojant 'sujungti()' funkcija iš bazinės R, naudojant 'dplyr' paketą ir „duomenys.lentelė“ paketą. Šiame vadove naudosime tris pirmiau nurodytus būdus, kaip sujungti duomenis naudojant R.
1. Naudojant „merge()“ iš pagrindinės R:
Funkcija merge() bazėje R padeda mums sujungti du ar daugiau duomenų rėmelių pagal bendrus stulpelius. Jis atlieka įvairių tipų sujungimus, tokius kaip vidinis sujungimas, kairysis sujungimas, dešinysis sujungimas ir visiškas sujungimas.
Sintaksė:
merged_df <- merge(x,y,by = 'common_column',..)>
- 'x' ir 'ir' yra duomenų rėmeliai, kuriuos norite sujungti.
- 'pagal' nurodo bendrus stulpelius, kuriuose bus atliekamas sujungimas.
- Papildomi argumentai, pvz „visi.x“ , all.y' ir 'visi' valdyti sujungimo tipą, kurį reikia atlikti.
Pavyzdys:
Apsvarstykite du duomenų rėmelius „df1“ ir „df2“
R
df1 <->data.frame>(ID =>c>(1, 2, 3, 4),> >Name =>c>(>'A'>,>'B'>,>'C'>,>'D'>),> >Age =>c>(25, 30, 35, 40))> df2 <->data.frame>(ID =>c>(2, 3, 4, 5),> >Occupation =>c>(>'Engineer'>,>'Teacher'>,>'Doctor'>,>'Lawyer'>),> >Salary =>c>(5000, 4000, 6000, 7000))> |
>
>
Pažiūrėkime, kaip atlikti įvairių tipų sujungimus naudojant funkciją „merge()“:
1. Vidinis sujungimas (numatytasis elgesys):
R
inner_join <->merge>(df1, df2, by =>'ID'>)> print>(inner_join)> |
>
>
Išvestis:
ID Name Age Occupation Salary 1 2 B 30 Engineer 5000 2 3 C 35 Teacher 4000 3 4 D 40 Doctor 6000>
Gautas „inner_join“ duomenų rėmelis apims tik bendras eilutes, kuriose „ID“ yra tiek „df1“, tiek „df2“.
2. Kairysis prisijungimas ( ‘all.x=TRUE’ ):
R
left_join <->merge>(df1, df2, by =>'ID'>, all.x =>TRUE>)> print>(left_join)> |
>
į priekį grandine
>
Išvestis:
ID Name Age Occupation Salary 1 1 A 25 NA 2 2 B 30 Engineer 5000 3 3 C 35 Teacher 4000 4 4 D 40 Doctor 6000>
Gautame „left_join“ duomenų rėmelyje bus visos eilutės iš 'df1' ir atitinkančias eilutes iš „df2“. Neatitinkančios eilutės iš „df2“ turės „NA“ reikšmę
3. Teisingai prisijungti ( ‘all.y=TRUE’ ):
R
right_join <->merge>(df1, df2, by =>'ID'>, all.y =>TRUE>)> print>(right_join)> |
>
>
Išvestis:
ID Name Age Occupation Salary 1 2 B 30 Engineer 5000 2 3 C 35 Teacher 4000 3 4 D 40 Doctor 6000 4 5 NA Lawyer 7000>
Gautame „right_join“ duomenų rėmelyje bus visos eilutės iš „df2“ ir atitinkamas eilutes iš „df1“. Neatitinkančiose eilutėse iš „df1“ bus „NA“ reikšmės.
4. Visas išorinis sujungimas ( 'visi = TRUE' )
R
full_join <->merge>(df1, df2, by =>'ID'>, all =>TRUE>)> print>(full_join)> |
>
>
Išvestis:
ID Name Age Occupation Salary 1 1 A 25 NA 2 2 B 30 Engineer 5000 3 3 C 35 Teacher 4000 4 4 D 40 Doctor 6000 5 5 NA Lawyer 7000>
Gautas „full_join“ duomenų rėmelis bus įtrauktas visos eilutės iš „df1“ ir „df2“. Neatitinkančios vertės turės „NA“ reikšmes.
2. Naudojant paketą „dplyr“:
Paketas „dplyr“ suteikia duomenų tvarkymo funkcijų rinkinį, įskaitant duomenų rėmelių sujungimą.
Pagrindinė „dplyr“ sujungimo funkcija yra 'prisijungti ()', kuri palaiko įvairių tipų sujungimus.
Sintaksė:
merged_df<- join(x,y,by='common_column',type='type_of_join')>
- 'x' ir 'ir' yra duomenų rėmeliai, kuriuos reikia sujungti.
- 'pagal' nurodo bendrus stulpelius, kuriuose turi būti atliktas sujungimas
- „prisijungimo_tipas“ gali būti „vidinis“, „kairysis“, „dešinis“ arba „visas“, kad būtų nurodytas sujungimo tipas.
Pavyzdys:
Įdiekite dplyr() supakuokite ir sukurkite du duomenų rėmelius, 'df1' ir „df2“.
supjaustykite java masyvą
R
library>(dplyr)> df1 <->data.frame>(ID =>c>(1, 2, 3, 4),> >Name =>c>(>'A'>,>'B'>,>'C'>,>'D'>),> >Age =>c>(20, 30, 40, 50))> df2 <->data.frame>(ID =>c>(2, 3, 4, 5),> >Occupation =>c>(>'Engineer'>,>'Teacher'>,>'Doctor'>,>'Lawyer'>),> >Salary =>c>(2000, 4000, 6000, 7000))> |
>
>
Pažiūrėkime, kaip atlikti įvairių tipų sujungimus naudojant „dplyr“ funkcijas:
1. Vidinis sujungimas:
nataša dalal
R
inner_join <->inner_join>(df1, df2, by =>'ID'>)> print>(inner_join)> |
>
>
Išvestis:
ID Name Age Occupation Salary 1 2 B 30 Engineer 2000 2 3 C 40 Teacher 4000 3 4 D 50 Doctor 6000>
Gautas „inner_join“ duomenų rėmelis apims tik bendros eilutės, kuriose „ID“ yra ir „df1“, ir „df2“.
2. Kairysis prisijungimas:
R
left_join <->left_join>(df1, df2, by =>'ID'>)> print>(left_join)> |
>
>
Išvestis:
ID Name Age Occupation Salary 1 1 A 20 NA 2 2 B 30 Engineer 2000 3 3 C 40 Teacher 4000 4 4 D 50 Doctor 6000>
Gautas „left_join“ duomenų rėmelis bus įtrauktas visos eilutės iš 'df1' ir atitinkančios eilutės iš „df2“ . Neatitinkančiose eilutėse iš „df2“ bus „NA“ reikšmės.
3. Teisingas prisijungimas:
R
right_join <->right_join>(df1, df2, by =>'ID'>)> print>(right_join)> |
>
>
Išvestis:
ID Name Age Occupation Salary 1 2 B 30 Engineer 2000 2 3 C 40 Teacher 4000 3 4 D 50 Doctor 6000 4 5 NA Lawyer 7000>
Gautas „right_join“ duomenų rėmelis bus įtrauktas visos eilutės iš 'df2' ir atitinkančias eilutes iš „df1“. Neatitinkančiose „df1“ eilutėse bus „NA“ reikšmės.
4. Visas išorinis sujungimas:
R
full_join <->full_join>(df1, df2, by =>'ID'>)> print>(full_join)> |
>
>
Išvestis:
ID Name Age Occupation Salary 1 1 A 20 NA 2 2 B 30 Engineer 2000 3 3 C 40 Teacher 4000 4 4 D 50 Doctor 6000 5 5 NA Lawyer 7000>
Gautas „full_join“ duomenų rėmelis bus įtrauktas visos eilutės iš „df1“ ir „df2“ . Neatitinkančiose eilutėse bus „NA“ reikšmės.
3. Naudojant paketą „data.table“:
Paketas „data.table“ siūlo efektyvų ir greitą duomenų apdorojimo būdą. Tai suteikia funkciją „sujungti ()“. Jis panašus į baziniame R, bet optimizuotas greičiui.
Sintaksė:
merged_dt <- merge(x, y, by = 'common_column', ...)>
- 'x' ir 'ir' yra duomenų rėmeliai, kurie turi būti sujungti.
- 'pagal' nurodo bendrus stulpelius, kuriuose bus atliekamas sujungimas.
- Papildomi argumentai, pvz „all.x“, „all.y“ ir 'visi' kuris valdo sujungimo tipą.
Pavyzdys:
Įdiekite biblioteką data.table ir sukurkite dvi duomenų lenteles „dt1“ ir „dt2“.
R
library>(data.table)> dt1 <->data.table>(ID =>c>(1, 2, 3, 4),> >Name =>c>(>'A'>,>'B'>,>'C'>,>'D'>),> >Age =>c>(25, 30, 35, 40))> dt2 <->data.table>(ID =>c>(2, 3, 4, 5),> >Occupation =>c>(>'Engineer'>,>'Teacher'>,>'Doctor'>,>'Lawyer'>),> >Salary =>c>(5000, 4000, 6000, 7000))> |
>
>
Pažiūrėkime pavyzdžius, kaip atlikti įvairių tipų sujungimus naudojant funkciją „merge()“ iš „data.table“ paketo:
1. Vidinis sujungimas (numatytasis elgesys):
R
inner_join <->merge>(df1, df2, by =>'ID'>)> print>(inner_join)> |
gimp pašalinti vandens ženklą
>
>
Išvestis:
ID Name Age Occupation Salary 1 2 B 30 Engineer 2000 2 3 C 40 Teacher 4000 3 4 D 50 Doctor 6000>
Gautas „inner_join“ duomenų rėmelis apims tik bendros eilutės, kuriose „ID“ yra ir „df1“, ir „df2“.
2. Kairysis sujungimas ('all.x = TRUE'):
R
left_join <->merge>(df1, df2, by =>'ID'>, all.x =>TRUE>)> print>(left_join)> |
>
>
Išvestis:
dvigubai java
ID Name Age Occupation Salary 1 1 A 20 NA 2 2 B 30 Engineer 2000 3 3 C 40 Teacher 4000 4 4 D 50 Doctor 6000>
Gautas „left_join“ duomenų rėmelis bus įtrauktas visi Neatitinkantis iš 'df1' ir atitinkančias eilutes iš „df2“. Neatitinkančiose eilutėse iš „df2“ bus „NA“ reikšmės.
3. Dešinysis prisijungimas ('all.y = TRUE'):
R
right_join <->merge>(df1, df2, by =>'ID'>, all.y =>TRUE>)> print>(right_join)> |
>
>
Išvestis:
ID Name Age Occupation Salary 1 2 B 30 Engineer 2000 2 3 C 40 Teacher 4000 3 4 D 50 Doctor 6000 4 5 NA Lawyer 7000>
Gautas „right_join“ duomenų rėmelis bus įtrauktas visi Neatitinkantis eilutes iš „df2“ ir atitinkamas eilutes iš „df1“. Neatitinkančiose eilutėse iš „df1“ bus „NA“ reikšmės.
3. Visas išorinis sujungimas („visi = TRUE“):
R
full_join <->merge>(df1, df2, by =>'ID'>, all =>TRUE>)> print>(full_join)> |
>
>
Išvestis:
ID Name Age Occupation Salary 1 1 A 20 NA 2 2 B 30 Engineer 2000 3 3 C 40 Teacher 4000 4 4 D 50 Doctor 6000 5 5 NA Lawyer 7000>
Gautas „full_join“ duomenų rėmelis bus įtrauktas visi Neatitinkantis eilutės iš „df1“ ir „df2“. Neatitinkančiose eilutėse bus „NA“ reikšmės.
Vienas iš „dplyr“ ir „data.table“ naudojimo pranašumų yra tas, kad jie suteikia glaustesnę ir skaitomesnę duomenų apdorojimo sintaksę, palyginti su bazine R.
Santrauka:
- „Merge()“ suteikia bendros paskirties duomenų rėmelių sujungimo funkciją.
- „dplyr“ daugiausia dėmesio skiria sujungimui, daugiausia dėmesio skiriant skaitomumui ir naudojimo patogumui.
- ‘duomenys. lentelė“ yra greitas ir efektyvus būdas tvarkyti didelius duomenų rinkinius su optimizuotu našumu.
- Turėtume pasirinkti metodą, atsižvelgdami į užduoties sudėtingumą ir atlikimo reikalavimus.