縦のデータと横のデータ

使用するパッケージ

library(tidyr)

サンプルデータセットの作成

dat1 <- c(-0.65, -0.58, 1.98, 0.98, 1.55, -0.05, 0.10, -1.35, 1.24, -0.28)
dat2 <- c(1.31, 2.39, 2.87, 2.25, 2.33, 5.32, 3.13, 1.21, 1.50, 0.97)

data <- c(dat1, dat2)
group <- c(
    rep("A", length(dat1)),
    rep("B", length(dat2))
)

(df <- data.frame(group, data))

このサイトではこのタイプを“縦のデータ“と定義します

群が独立している場合の差の検定、分散分散分析などで使用されます

t検定の場合(独立2群の差の検定)

t.test(data ~ group, data=df)

もしこのデータが対応のあるデータだったら

便宜上、対応していることを示すためにIDを振ります

df$id <- c(rep(c(1:10), 2))
df

更に、A、Bを前後に書き換えます

df$point <- c(rep("前", 10), rep("後", 10))
(df2 <- df[, -1])

横データに変換

(df2yoko <- tidyr::spread(df2, key=point, value=data))

列が後前になっているので前後に場所移動

(df3 <- df2yoko[,c(1, 3, 2)])

ここ”横データ”から対応あるt検定(1標本t検定)

t.test(df3$後 - df3$前)

対応のあるグラフ

x <- c(1.1, 1.9) #見栄えをよくするためにちょっとずらす 
(dat <- t(df3[,2:3]))
matplot(
    x, dat,
    type ="l", lty=1, col=1,
    xaxt="n",
    xlim=c(1, 2),
    xlab="", ylab=""
)
name <- c("前", "後")
axis(side=1, at=c(1.1, 1.9), labels=name)

縦データに変換したい場合

tidyr::gather(df3, key=point, value=data, -id)

ダメ出し 間違い、分かりにくい部分などのご意見をお待ちします

タイトルとURLをコピーしました