[R/SAS/Python]データの結合(横結合/内部結合)
目的
以下のような2種類のデータを横結合/内部結合したい。
内部結合が何なのか分からない人はググれ。
(参考)FFキャラの身長、体重
(参考)FFキャラランキング(30位まで)
元データ①
ID | NAME | SEX | HEIGHT | WEIGHT |
---|---|---|---|---|
1 | スコール | Male | 177 | 64 |
2 | リノア | Female | 163 | 50 |
3 | キスティス | Female | 172 | 55 |
4 | ゼル | Male | 168 | 61 |
5 | セルフィ | Female | 157 | 41 |
6 | アーヴァイン | Male | 185 | 70 |
元データ②
RANK | NAME |
---|---|
1位 | クラウド |
2位 | エアリス |
3位 | ティーダ |
4位 | ユウナ |
5位 | スコール |
6位 | セフィロス |
7位 | ザックス |
8位 | ライトニング |
9位 | アーロン |
10位 | カイン |
11位 | ティファ |
12位 | ビビ |
13位 | セシル |
14位 | バッツ |
15位 | ノクティス |
16位 | ティナ |
17位 | ロック |
18位 | ジタン |
19位 | レノ |
20位 | ユフィ |
21位 | リュック |
22位 | マッシュ |
23位 | レッドXIII |
24位 | ヴィンセント |
25位 | ウォーリア オブ ライト(光の戦士) |
26位 | モーグリ |
27位 | エドガー |
28位 | リノア |
29位 | ラグナ |
30位 | セリス |
作成するデータ
ID | NAME | SEX | HEIGHT | WEIGHT | RANK |
---|---|---|---|---|---|
1 | スコール | Male | 177 | 64 | 5位 |
2 | リノア | Female | 163 | 50 | 28位 |
プログラム
RSASPythom
#ライブラリ呼び出し library(dplyr) #データフレームの作成① DATA1 <- data.frame(ID = c(1,2,3,4,5,6), NAME = c("スコール","リノア","キスティス","ゼル","セルフィ","アーヴァイン"), SEX = c("Male","Female","Female","Male","Female","Male"), HEIGHT = c(177,163,172,168,157,185), WEIGHT = c(64,50,55,61,41,70)) #データフレームの作成② DATA2 <- data.frame(RANK= c("1位","2位","3位","4位","5位","6位","7位","8位","9位","10位","11位","12位","13位","14位","15位","16位","17位","18位","19位","20位","21位","22位","23位","24位","25位","26位","27位","28位","29位","30位"), NAME = c("クラウド","エアリス","ティーダ","ユウナ","スコール","セフィロス","ザックス","ライトニング","アーロン","カイン","ティファ","ビビ","セシル","バッツ","ノクティス","ティナ","ロック","ジタン","レノ","ユフィ","リュック","マッシュ","レッドXIII","ヴィンセント","ウォーリア オブ ライト(光の戦士)","モーグリ","エドガー","リノア","ラグナ","セリス")) #データフレームの横結合(内部結合) DATA3 <- inner_join(DATA1, DATA2, by = "NAME")
/* データセットの作成① */ data DATA1; attrib ID length = 8; attrib NAME length = $100; attrib SEX length = $6; attrib HEIGHT length = 8; attrib WEIGHT length = 8; input ID NAME $ SEX $ HEIGHT WEIGHT; cards; 1 スコール Male 177 64 2 リノア Female 163 50 3 キスティス Female 172 55 4 ゼル Male 168 61 5 セルフィ Female 157 41 6 アーヴァイン Male 185 70 ; run; /* データセットの作成② */ data DATA2; attrib RANK length = $8; attrib NAME length = $100; input RANK NAME $; cards; 1位 クラウド 2位 エアリス 3位 ティーダ 4位 ユウナ 5位 スコール 6位 セフィロス 7位 ザックス 8位 ライトニング 9位 アーロン 10位 カイン 11位 ティファ 12位 ビビ 13位 セシル 14位 バッツ 15位 ノクティス 16位 ティナ 17位 ロック 18位 ジタン 19位 レノ 20位 ユフィ 21位 リュック 22位 マッシュ 23位 レッドXIII 24位 ヴィンセント 25位 ウォーリア オブ ライト(光の戦士) 26位 モーグリ 27位 エドガー 28位 リノア 29位 ラグナ 30位 セリス ; run; /* データセットの並び替え */ proc sort data = DATA1; by NAME; run; proc sort data = DATA2; by NAME; run; /* データセットの横結合(内部結合) */ data DATA3; merge DATA1(in = in1) DATA2(in = in2); by NAME; if in1 = in2 then output; else delete; run;
SASでデータセットの横結合をする場合は事前にKEY変数でデータを並び替える必要がある
#ライブラリ呼び出し import pandas as pd #データフレームの作成① DATA1 = pd.DataFrame({ 'ID' : ([1,2,3,4,5,6]), 'NAME' : (["スコール","リノア","キスティス","ゼル","セルフィ","アーヴァイン"]), 'SEX' : (["Male","Female","Female","Male","Female","Male"]), 'HEIGHT' : ([177,163,172,168,157,185]), 'WEIGHT' : ([64,50,55,61,41,70]) }) #データフレームの作成② DATA2 = pd.DataFrame({ 'RANK' : (["1位","2位","3位","4位","5位","6位","7位","8位","9位","10位","11位","12位","13位","14位","15位","16位","17位","18位","19位","20位","21位","22位","23位","24位","25位","26位","27位","28位","29位","30位"]), 'NAME' : (["クラウド","エアリス","ティーダ","ユウナ","スコール","セフィロス","ザックス","ライトニング","アーロン","カイン","ティファ","ビビ","セシル","バッツ","ノクティス","ティナ","ロック","ジタン","レノ","ユフィ","リュック","マッシュ","レッドXIII","ヴィンセント","ウォーリア オブ ライト(光の戦士)","モーグリ","エドガー","リノア","ラグナ","セリス"]) }) #データフレームの横結合(内部結合) DATA3 = pd.merge(DATA1, DATA2, how = 'inner', on = 'NAME')
ご意見・ご要望などありましたらコメント欄に書き込みくださいませ。
新規記事投稿のリクエストなどあれば問い合わせフォームからどうぞ。