R cumsum 分组
R cumsum groupby
我在 R 中有以下代码
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)
这会产生以下结果 table
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
我现在正在尝试像这样制作一个 table,其中 cumsum 列是每个 'name' 'score' 列中 1 的计数,如下所示:
name score rank cumsum
1 b 0 1 0
2 a 1 1 1
3 a 1 2 2
4 c 1 1 1
5 c 1 2 2
6 a 0 3 2
7 a 1 4 3
8 b 0 2 0
9 c 1 3 2
10 c 1 4 3
我试过了,我正确地得到了 cumsums,但我不知道如何合并回 'order'
中的数据框 df
> dftable <- as.data.table(df)
> dfn <- dftable[,list(cumsum = cumsum(score)),by=list(name)]
> dfn
name cumsum
1: b 0
2: b 0
3: a 1
4: a 2
5: a 2
6: a 3
7: c 1
8: c 2
9: c 3
10: c 4
非常感谢任何帮助。
我们可以使用 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
或其他名称,以免将来出现问题
我在 R 中有以下代码
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)
这会产生以下结果 table
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
我现在正在尝试像这样制作一个 table,其中 cumsum 列是每个 'name' 'score' 列中 1 的计数,如下所示:
name score rank cumsum
1 b 0 1 0
2 a 1 1 1
3 a 1 2 2
4 c 1 1 1
5 c 1 2 2
6 a 0 3 2
7 a 1 4 3
8 b 0 2 0
9 c 1 3 2
10 c 1 4 3
我试过了,我正确地得到了 cumsums,但我不知道如何合并回 'order'
中的数据框 df> dftable <- as.data.table(df)
> dfn <- dftable[,list(cumsum = cumsum(score)),by=list(name)]
> dfn
name cumsum
1: b 0
2: b 0
3: a 1
4: a 2
5: a 2
6: a 3
7: c 1
8: c 2
9: c 3
10: c 4
非常感谢任何帮助。
我们可以使用 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
或其他名称,以免将来出现问题