ベース R では、 and を使用by
しxtabs
ます。
by(dat, dat$year, with, as.matrix(xtabs(~ id + club) * 1L))
行列のリストを返します (1 年に 1 つ)。1L
また、ブール値の行列を返すために掛けないことをお勧めします。
Edit1: 提案されているように、分割表を非常に簡単に作成することもできます。
table(dat[c("id", "club", "year")])
Edit2:リカルドの答えに対するあなたのコメントを見ました。おそらくこれがあなたが探しているものです:
library(plyr)
ddply(dat, .(year, id), with, 1L * (table(club) > 0))
# year id C1 C2
# 1 2010 A 1 0
# 2 2010 B 1 0
# 3 2010 C 0 1
# 4 2011 A 1 0
# 5 2011 B 0 1
.drop = FALSE
可能な年/ID の組み合わせをすべて (6) 取得するために使用することもできます。
ddply(dat, .(year, id), with, 1L * (table(club) > 0), .drop = FALSE)
# year id C1 C2
# 1 2010 A 1 0
# 2 2010 B 1 0
# 3 2010 C 0 1
# 4 2011 A 1 0
# 5 2011 B 0 1
# 6 2011 C 0 0