使用ddply在子集化期间计算变量的级别

时间:2012-03-21 17:18:30

标签: r plyr

我需要计算巨大矩阵中每个因子级别的变量类别数。我尝试在下面的脚本中使用ddply,但它不起作用,我无法弄清楚为什么。

这是我的代码带有示例数据帧:

a<-as.factor(c(1,1,1,2,2,2,3,3,3))
b<-as.factor(c(1,1,1,2,2,3,1,2,3))
df=data.frame(a=a,b=b)

records=ddply(df, .(a),
          summarise,
          categories=length(levels(b))
          )              
records

应该给出:

a categories
1 1          1
2 2          2
3 3          3

有人有提示吗?它让我完全卡住.. 谢谢! Agus的

1 个答案:

答案 0 :(得分:0)

当您对因子进行子集时,因子的级别不会改变。级别表示因子可能采用的可能值,而不是它所执行的值集。所以你可以用

替换你的代码
records=ddply(df, .(a),
          summarise,
          categories=length(levels(droplevels(b)))
          )              

甚至

records=ddply(df, .(a),
          summarise,
          categories=length(unique(b))
          )

其中任何一个都给出了

> records
  a categories
1 1          1
2 2          2
3 3          3