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

目的
以下のようなデータを転置(横→縦)したい。

元データ

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


作成するデータ

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

プログラム

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別に転置できないので注意


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

コメントを残す

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