在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; 停止分组 通过设置此约束,我唯一的目的是计算满足此条件的行数。
提前致谢。
答案 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")