[R/SAS/Python]データの結合(横結合/外部結合)

目的
以下のような2種類のデータを横結合/外部結合したい。
今回の場合は左外部結合という。
(参考)FFキャラの身長、体重
(参考)FFキャラランキング(30位まで)

元データ①

IDNAMESEXHEIGHTWEIGHT
1スコールMale17764
2リノアFemale16350
3キスティスFemale17255
4ゼルMale16861
5セルフィFemale15741
6アーヴァインMale18570


元データ②

RANKNAME
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位セリス


作成するデータ

IDNAMESEXHEIGHTWEIGHTRANK
1スコールMale177645位
2リノアFemale1635028位
3キスティスFemale17255
4ゼルMale16861
5セルフィFemale15741
6アーヴァインMale18570

プログラム

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 <- left_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 = 1 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 = 'left',
                 on = 'NAME')



ご意見・ご要望などありましたらコメント欄に書き込みくださいませ。
新規記事投稿のリクエストなどあれば問い合わせフォームからどうぞ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です