我有一个包含31个变量的学生数据数据框。出于这个问题的目的,我只对以下列感兴趣。我这样安排他们进行示威:
id year action
1 2009-10 A
2 2009-10 A
3 2009-10 A
1 2010-11 A
2 2010-11 declined
3 2010-11 declined
1 2011-12 A
我想提供一份三年以上的学生入学摘要。创建一个频率表让我非常接近我想要的结果:
table(dem$id, dem$year)
2009-10 2010-11 2011-12
1 1 1 1
2 1 1 0
3 1 1 0
但是,它没有考虑" action"列(显然)。我需要根据来衡量注册情况
1)学生辍学了吗?如果它们在2009-10之后辍学,那么这个数据库中就没有它们的记录
2)他们接受了吗?如果答案不是" A",则学生尚未接受
我的理想输出看起来像这样:
id 2009-10 2010-11 2011-12
1 1 1 1
2 1 0 0
3 1 0 0
我尝试了ddply(summary)和ifelse()的一些组合,但我的实现必须是奇怪的,因为我没有得到我需要的结果
答案 0 :(得分:1)
为什么不:
table(dem[c("id", "year", "action")])
产地:
, , action = A
year
id 2009-10 2010-11 2011-12
1 1 1 1
2 1 0 0
3 1 0 0
, , action = declined
year
id 2009-10 2010-11 2011-12
1 0 0 0
2 0 1 0
3 0 1 0
如果您只想要A
,您也可以将dem
分组(尽管action
需要为此字符才能显示A
):
table(subset(dem[c("id", "year", "action")], action=="A"))