R中的动态分组基于应用函数条件的分组

时间:2017-11-04 14:01:07

标签: r aggregate

在R中,在aggregate()函数中,如何指定对变量上应用函数进行分组的停止条件?

例如,我有这样的数据框:" df" Input Data frame

注意:假设输入数据框中的每一行都表示该匹配中玩家所玩的单个球。因此,通过计算一些行可以告诉我们所需的球数。

而且,我希望我的数据框像这样:Output data frame 我需要的是:10次跑步需要多少球?

目前,我正在使用此R代码: group_data <- aggregate(df$score, by=list(Category=df$player,df$match), FUN=sum,na.rm = TRUE)

使用此代码,我无法按我的意愿停止分组,它会在对所有行进行分组时停止。我不想要考虑所有行。

但是如何设置约束&#34;一旦得分&gt; = 10&#34; 停止分组 通过设置此约束,我唯一的目的是计算满足此条件的行数。

提前致谢。

1 个答案:

答案 0 :(得分:2)

以下是使用dplyr

的一个选项
library(dplyr)
df1 %>%
    group_by(match, player) %>% 
    filter(!lag(cumsum(score) > 10, default = FALSE)) %>% 
    summarise(score = sum(score), Count = n())
# A tibble: 2 x 4
# Groups:   match [?]
#   match player score Count
#   <int>  <int> <dbl> <int>
#1     1     30    12     2
#2     2     31    15     3

数据

df1 <- structure(list(match = c(1L, 1L, 1L, 2L, 2L, 2L), player = c(30L, 
30L, 30L, 31L, 31L, 31L), score = c(6, 6, 6, 3, 6, 6)), .Names = c("match", 
 "player", "score"), row.names = c(NA, -6L), class = "data.frame")