R cumsum groupby

时间:2017-05-01 03:34:05

标签: r cumsum

我在R

中有以下代码
public function associate_user($organization_id) {
    $data = [
        'organization' => \App\Organization::find($organization_id),
        'users'        => \App\User::whereDoesntHave('organizations', function($query) use ($organization_id){
            $query->where('organization_id', $organization_id);
        })->get(); // Add the call to get()
    ];
    return view('admin.associateUser', data);
}

这将产生下表

<div class="container">
  <div class="row">

    // Your code here

  </div>
</div>

我现在正试图制作一个像这样的表,其中cumsum列是每个'name'的'score'列中1的计数,如下所示:

set.seed(12048)
name <- sample(letters[1:3], 10, replace=T)
df <- data.frame(name, stringsAsFactors = F)
df$score <- sample(0:1, nrow(df), replace=T)
df$rank <- as.numeric(ave(df$name, df$name, FUN=seq_along))
v <- by(df$score, df$name, cumsum)

我试过这个并且我得到了正确的cumsums,但我无法弄清楚如何在'order'中合并回我的数据框df

   name score rank
1     b     0    1
2     a     1    1
3     a     1    2
4     c     1    1
5     c     1    2
6     a     0    3
7     a     1    4
8     b     0    2
9     c     1    3
10    c     1    4

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

我们可以使用mutate

中的dplyr
 library(dplyr)
 df %>% 
    group_by(name) %>%
    mutate(cumsum = cumsum(score))

如果我们想使用base R,则一个选项为ave,因为评论中提到了@Frank

df$cumsum <- with(df, ave(score, name, FUN = cumsum))

注意:最好不要为具有功能名称的对象命名,例如cumsum可以是Cumsum1或其他名称以避免将来出现问题