[R/SAS/Python]データの転置(横→縦)
目的
以下のようなデータを転置(横→縦)したい。
元データ
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 |
作成するデータ
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 |
プログラム
RSASPythom
#ライブラリ呼び出し library(tidyr) #データフレームの作成 DATA1 <- data.frame(NAME = c("Aさん","Bさん"), "10/04" = c(70.4, 55.1), "10/11" = c(69.6, 56.3), "10/18" = c(70.3, NA), "10/25" = c(70.1, 57.5), "11/01" = c(69.0, 55.5)) names(DATA1) <- c("NAME", "10/04", "10/11", "10/18", "10/25" ,"11/01") #データフレームの転置(横→縦) DATA2 <- gather(DATA1, key = DATE, value = WEIGHT, -NAME, na.rm = TRUE)
tidyrパッケージのgather関数を使う。
Rの変数命名規則では頭文字に数字や、スラッシュを使えないのでnames()で再定義する(11行目)。
/* データセットの作成 */ data DATA1; input NAME $ DATE10_04 DATE10_11 DATE10_18 DATE10_25 DATE11_01; cards; Aさん 70.4 69.6 70.3 70.1 69.0 Bさん 55.1 56.3 . 57.5 55.5 ; run; /* データセットの転置(横→縦) */ proc transpose data = DATA1 out = DATA2; by NAME; run;
#ライブラリ呼び出し import pandas as pd #データフレームの作成 DATA1 = pd.DataFrame({ 'NAME' : (["Aさん", "Bさん"]), '10/04' : ([70.4, 55.1]), '10/11' : ([69.6, 56.3]), '10/18' : ([70.3, None]), '10/25' : ([70.1, 57.5]), '11/01' : ([69.0, 55.5]) }) #データフレームの転置(横→縦) DATA2 = DATA1.stack()
pandasのstack()を使う。transpose()だと全転置しかできずNAME別に転置できないので注意
ご意見・ご要望などありましたらコメント欄に書き込みくださいませ。
新規記事投稿のリクエストなどあれば問い合わせフォームからどうぞ。