[R/SAS/Python]データの転置(縦→横)
目的
以下のようなデータを名前(NAME)ごとに転置(縦→横)したい。
元データ
NAME | DATE | WEIGHT |
---|---|---|
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 |
作成するデータ
NAME | 10/04 | 10/11 | 10/18 | 10/25 | 11/01 |
---|---|---|---|---|---|
Aさん | 70.4 | 69.6 | 70.3 | 70.1 | 69.0 |
Bさん | 55.1 | 56.3 | 57.5 | 55.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別に転置できないので注意
ご意見・ご要望などありましたらコメント欄に書き込みくださいませ。
新規記事投稿のリクエストなどあれば問い合わせフォームからどうぞ。