[英]How to reshape and summarise categorical data from long to wide?
我的數據庫是這樣的:
db <- data.frame(var1 = c("A", "B", "C", "D", "E"), var2 = c("X", "X", "Y", "Y", "Y"),
var3 = c("G", "H", "G", "G", "K"))
db
var1 var2 var3
A X G
B X H
C Y G
D Y G
E Y K
我想基於var2重塑形狀並計算var3的出現次數以獲得以下結果:
var2 var3.G var3.H var3.K
X 1 1 0
Y 2 0 1
我嘗試了投射和重塑功能,但均未成功。
xtabs函數使用起來相當簡單。 唯一的認知上的飛躍是認識到沒有LHS,除非您想對第三個變量求和:
> xtabs( ~var2+var3, data=db)
var3
var2 G H K
X 1 1 0
Y 2 0 1
您不希望對此執行as.data.frame
,因為它將轉換為長格式,但是您可以在其上使用as.data.frame.matrix
,因為R-'table'繼承自'matrix'類。
tbl <- data.frame( var2 = db[,2], var3 = paste("var3", db[,3], sep = "."))
table(tbl)
var3
var2 var3.G var3.H var3.K
X 1 1 0
Y 2 0 1
還有一個選擇。 使用超級有用的data.table包:
library(data.table)
db <- data.table(var1 = c("A", "B", "C", "D", "E"), var2 = c("X", "X", "Y", "Y", "Y"),
var3 = c("G", "H", "G", "G", "K"))
dcast.data.table(db, var2 ~ var3, fun = length, value.var= 'var3')
var2 G H K
1: X 1 1 0
2: Y 2 0 1
這是另一種解決方法:
您可以結合使用t()和table()。
db <- data.frame(var1 = c("A", "B", "C", "D", "E"),
var2 = c("X", "X", "Y", "Y", "Y"),
var3 = c("G", "H", "G", "G", "K"))
db
t(table(db$var3,db$var2))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.