[R/SAS/Python]データの転置(縦→横)

目的
以下のようなデータを名前(NAME)ごとに転置(縦→横)したい。

元データ

NAMEDATEWEIGHT
Aさん10/0470.4
Aさん10/1169.6
Aさん10/1870.3
Aさん10/2570.1
Aさん11/0169.0
Bさん10/0455.1
Bさん10/1156.3
Bさん10/2557.5
Bさん11/0155.5


作成するデータ

NAME10/0410/1110/1810/2511/01
Aさん70.469.670.370.169.0
Bさん55.156.357.555.5

プログラム

RSASPythom
#ライブラリ呼び出し
library(tidyr)

#データフレームの作成
DATA1 <- data.frame(NAME = c("Aさん", "Aさん", "Aさん", "Aさん", "Aさん", "Bさん", "Bさん", "Bさん","Bさん"),
                    DATE = c("10/04", "10/11", "10/18", "10/25" ,"11/01","10/04", "10/11", "10/25" ,"11/01"),
                    WEIGHT = c(70.4, 69.6, 70.3, 70.1, 69.0, 55.1, 56.3, 57.5, 55.5)
                    )

#データフレームの転置(縦→横)
DATA2 <- spread(DATA1, key = DATE, value = WEIGHT)

tidyrパッケージのspred関数を使う。

/* データセットの作成 */
data DATA1;
  input NAME $ DATE $ WEIGHT;
  cards;
  Aさん 10/04 70.4
  Aさん 10/11 69.6
  Aさん 10/18 70.3
  Aさん 10/25 70.1
  Aさん 11/01 69.0
  Bさん 10/04 55.1
  Bさん 10/11 56.3
  Bさん 10/25 57.5
  Bさん 11/01 55.5
  ;
run;

/* データセットの転置(縦→横) */
proc transpose data = DATA1 out = DATA2;
  by NAME;
  id DATE;
  var WEIGHT;
run;
#ライブラリ呼び出し
import pandas as pd
#データフレームの作成
DATA1 = pd.DataFrame({ 'NAME' : (["Aさん", "Aさん", "Aさん", "Aさん", "Aさん","Bさん", "Bさん", "Bさん", "Bさん"]),
                       'DATE' : (["10/04", "10/11", "10/18", "10/25","11/01","10/04", "10/11", "10/25","11/01"]),
                       'WEIGHT' : ([70.4, 69.6, 70.3, 70.1, 69.0, 55.1, 56.3, 57.5, 55.5])
                            })

#データフレームの転置(縦→横)
DATA2 = DATA1.pivot(index = 'NAME', columns = 'DATE')

pandasのpivot()を使う。transpose()だと全転置しかできずNAME別に転置できないので注意


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

コメントを残す

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