2015-01-07 21 views
0

的样本数据:表()的组中的R

a <- sample(1:4, 100, replace = T) 
b <- sample(0:1, 100, replace = T) 

d <- data.frame(a, b) 

我想为a各级自动实现这一目标输出:

table(d$b[d$a==1]) 
table(d$b[d$a==2]) 
table(d$b[d$a==3]) 
table(d$b[d$a==4]) 

我可以做一个for循环,但是不是在河的精神

for (i in unique(d$a)) { 
print(table(d$b[d$a==i])) 
} 

相反,我想使用的许多单功能之一R. 我试图用ddplyplyr包:

ddply(d, ~a, function(x) table(b)) 

但这只是同table(d$b)重复四次。

如何使用列表函数将table()函数应用于a中的每个组,最好是ddply

+1

没有必要'plyr'(一看便知),但你几乎没有:'ddply(d,〜一,功能(X)表(X $ b))'。 'ddply'将子集data.frames传递给函数,并且你希望从这些子集中得到'b'。 – Roland

+0

@Roland也谢谢你。 – iraserd

回答

3

您可以使用table使用多个参数:

table(d$a,d$b) 

    0 1 
    1 15 10 
    2 6 16 
    3 13 10 
    4 20 10 

或者,如果你只有要在data.frame制表数据,它会为您处理它,如果你的数据传递。框架:

table(d) 
    b 
a 0 1 
    1 15 10 
    2 6 16 
    3 13 10 
    4 20 10 
+1

在这种情况下,'table(d)'应该足够了 - 除非我在这个问题中丢失了一些明显的东西。 – A5C1D2H2I1M1N2O1R2T1

+0

有时候只是在解决问题时跳过解决方案并跳过检查帮助文件的部分。显然,直到现在我还没有使用'table()'来充分发挥它的潜力...... – iraserd

+0

@James忘记我删除的最后一条评论,我在检查了NAs和长度并且奇怪地工作之后再次尝试了它,所以它很可能是一个错字...我很抱歉。 – iraserd