subset()一个因子的观察次数

时间:2012-12-08 12:09:28

标签: r frequency subset

我对subset()函数有问题。如何通过观察次数对我的数据帧的因子进行子集化?

   NAME      CLASS         COLOR   VALUE      
   antonio       B          YELLOW       5
   antonio       B          BLUE       8
   antonio       B          BLUE       7 
   antonio       B          BLUE      12 
   luca          C          YELLOW    99
   luca          B          YELLOW    87
   luca          B          YELLOW    98
   giovanni      A          BLUE      48

我想获得数据,其中“NAME”,“CLASS”和“COLOR”这三个因子至少比较三次才能得出VALUE的平均值。在这种情况下,我将获得:

   NAME      CLASS         COLOR   VALUE      
   antonio       B          BLUE       mean

因为antonio是唯一对每个因子进行三次观察的

非常感谢你

的Nik

1 个答案:

答案 0 :(得分:10)

您可以使用table功能,如下所示:

subset(df, table(FACTOR)[FACTOR] >= 3)
#    FACTOR VALUE
# 1 ANTONIO     5
# 2 ANTONIO     8
# 3 ANTONIO     7

为了帮助您了解,请查看这些内容:

table(df$FACTOR)
table(df$FACTOR)[df$FACTOR]
table(df$FACTOR)[df$FACTOR] >= 3

您还可以使用ave函数计算观察次数:

subset(df, ave(VALUE, FACTOR, FUN = length) >= 3)

如果您有多个因素,例如您在评论和更新的问题中提出的问题,那么最后一种方法可能会更灵活一些。你可以这样做:

subset(df, ave(VALUE, NAME, CLASS, COLOR, FUN = length) >= 3)