Rで作る分割表(クロス表)

分割表の基礎

分割表を作成します

R
#検査結果 0=陰性、1=陽性
検査結果 <- c(rep("陰性",70), rep("陽性",75))  

#罹患 0=無し、1=あり
罹患 <- c(
  rep("無し", 45),
  rep("あり", 25), 
  rep("無し", 8), 
  rep("あり", 67)
)  

tab <- xtabs(~ 検査結果 + 罹患)
print(tab)
画像に alt 属性が指定されていません。ファイル名: image-46.png
レベルの確認、基準の変更

分割表の左上が「検査陽性」、「罹患あり」になるように検査結果の「陽性」を上段に移行します。まず各変数(検査結果、罹患)にレベルを付与するためにファクター変数に変換します。

R
検査結果 <- factor(検査結果)
罹患 <- factor(罹患)

変数の種類(データ型)を調べます

R
class(検査結果)
class(罹患)
画像に alt 属性が指定されていません。ファイル名: image-8.png

データ型がfactor変数になったので変数にlevelが付与されます。確認してみます。

R
levels(検査結果)
levels(罹患)
画像に alt 属性が指定されていません。ファイル名: image-10.png

levels:先に記載されている方がデータの『基準』となります。検査結果の基準は”陰性”、罹患の基準は”あり”になっています。

正確に言うと基準ではなく、検査結果のlevelは、陰性=1、陽性=2、罹患のlevelはあり=1、無し=2としてRが認識するということになります。

R
as.integer(検査結果)
as.integer(罹患)
画像に alt 属性が指定されていません。ファイル名: image-11.png

検査結果の基準(1)を”陽性”に変更します。

画像に alt 属性が指定されていません。ファイル名: image-12.png

検査結果2<- factor(検査結果, levels = c(“陽性”, “陰性”))
としても同じ結果を得ることができます

“陽性”が先に表示されています。したがって検査結果のレベルの基準(1)は”陽性”になりました。再度、分割表を作成します(間違いないように検査結果2という変数名に変更しておきます)。

R
tab2 <- xtabs(~ 検査結果2 + 罹患)
print(tab2)
画像に alt 属性が指定されていません。ファイル名: image-40.png

これで馴染みのある並び方になりました

画像に alt 属性が指定されていません。ファイル名: image-108.png

参考(ChatGPTの回答)

分割表を作成

R
# データフレームの作成
dat <- data.frame(
    c(rep("あり", 15),rep("なし", 15)),
    c(rep("あり", 9), rep("なし", 6), rep("あり", 5), rep("なし", 10)),
    c(rep("有効", 12), rep("無効", 3), rep("有効", 4), "無効", "有効", "有効", rep("無効", 8))
)
# 列名を変更
colnames(dat) <- c("筋トレ", "歩行練習", "効果")
# 先頭6行の確認
head(dat)

1列目(筋トレ)と3列目(歩行練習)の分割表を作成

R
tab1 <- xtabs(
    ~筋トレ + 効果,
    data=dat
)
print(tab1)

分割表を作業フォルダに保存する場合

R
write.csv(tab1, file="tab1.csv",fileEncoding="UTF-8")

エクセルなどで開いて文字化けすることが気になるのであれば、以下のように保存

R
write.csv(tab1, file="tab1.csv",fileEncoding="Shift-JIS")

ただし、次回読み込むときも fileEncoding=”Shift-JIS” とする

分割表の操作

周辺合計

R
addmargins(tab1)

列の入れ替え

R
tab1[c("あり","なし"), c("有効", "無効")]

転置

R
t(tab1)

コメント欄 『間違い』や『分かりにくい部分』などのご意見もお寄せください

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