我在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
非常感谢任何帮助。
答案 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
或其他名称以避免将来出现问题