r语言 - 任何进行过滤和汇总的方法



我刚开始使用ddply,发现它非常有用。我想总结一个数据帧,并根据汇总列是否具有特定值,在最终输出中删除一些行。这就像SQL中的HAVINGGROUP BY一样。下面是一个例子:

input = data.frame(id=     c( 1, 1, 2, 2, 3,   3),
                   metric= c(30,50,70,90,40,1050),
                   badness=c( 1, 5, 7, 3, 3,  99))
intermediateoutput = ddply(input, ~ id, summarize,
                           meanMetric=mean(metric),
                           maxBadness=max(badness))
intermediateoutput[intermediateoutput$maxBadness < 50,1:2]

这给:

  id meanMetric
1  1         40
2  2         80

这是我想要的,但我能在ddply语句中的一个步骤中以某种方式做到这一点吗?

您应该尝试使用dplyr。它更快,代码更容易阅读和理解,特别是如果您使用管道(%>%):

input %>%
    group_by(id) %>%
    summarize(meanMetric=mean(metric), maxBadness=max(badness)) %>%
    filter(maxBadness <50) %>%
    select(-maxBadness)

在@Arun注释之后,可以这样简化代码:

input %>%
    group_by(id) %>%
    filter(max(badness)<50) %>%
    summarize(meanMetric=mean(metric))

最新更新