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

   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 是唯一一个对每个因素有三个观察值的人

太感谢了

尼克

最佳答案

您可以按如下方式使用 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)

关于r - subset() 一个因子,由它的观察次数决定,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13777317/

10-12 17:06