xtabs()
次のように一緒に使用aggregate()
します。
df <- data.frame(id = c(1,1,1,1,1,2,2,2,2),
spent = c(10,10,20,10,10,5,5,5,20),
period = c("f","c","c","v","v","f","c","c","v"),
mean.spent = c(10,15,15,10,10,5,5,5,20))
xtabs(spent ~ id + period, aggregate(spent ~ id + period, df, mean))
# period
# id c f v
# 1 15 10 10
# 2 5 5 20
aggregate
グループごとの平均を計算し(「id」と「period」でグループ化)、xtabs
このより広い形式に変換します。
これを作成する方法は次のdata.frame
とおりです。
temp1 <- xtabs(spent ~ id + period,
aggregate(spent ~ id + period, df, mean))
data.frame(id = dimnames(temp1)$id, as.data.frame.matrix(temp1))
# id c f v
# 1 1 15 10 10
# 2 2 5 5 20
更新:より直接的なアプローチ
私はいつも忘れてtapply
いますが、この例は便利な場合に適しています。
tapply(df$spent, list(df$id, df$period), mean)
# c f v
# 1 15 10 10
# 2 5 5 20