如何对每年的项目进行汇总,并键入合计总数-R

如何对每年的项目进行汇总,并键入合计总数-R,r,R,我有一个数据框架,其中包含每年创建的不同类型的新项目数量: # Sample data df = data.frame(n_new = c(1, 1, 2, 4, 5, 3), type = c("a", "b", "a", "b", "a", "a"), year = c(2000, 2000, 2001, 2003, 2004, 2005)) df # n_new type year

我有一个数据框架,其中包含每年创建的不同类型的新项目数量:

# Sample data
df = data.frame(n_new = c(1,    1,    2,    4,    5,    3),
                type = c("a",  "b",  "a",  "b",  "a",  "a"),
                year = c(2000, 2000, 2001, 2003, 2004, 2005))
df
#   n_new type year
# 1     1    a 2000
# 2     1    b 2000
# 3     2    a 2001
# 4     4    b 2003
# 5     5    a 2004
# 6     3    a 2005
由于这些项目在随后的几年中继续存在,我想将它们聚合为不断增长的现有项目总数,针对每种类型

# Expected result
df$n_total = c(1, 1, 3, 5, 8, 11)
df
#   n_new type year n_total
# 1     1    a 2000       1
# 2     1    b 2000       1
# 3     2    a 2001       3
# 4     4    b 2003       5
# 5     5    a 2004       8
# 6     3    a 2005      11
为此,我尝试将每个值(每种类型)与上一年的值相加

df$n_total[df$type = "a"] <- df$n_new[df$type = "a"] + 
                             df$n_new[df$type = "a" & df$year - 1] 
# It obviously doesn't work ;-)

df$n_total[df$type=“a”]您可以使用dplyr
group_by
函数加上
mutate
cumsum
,如下所示:

library(dplyr)

df = data.frame(n_new = c(1,    1,    2,    4,    5,    3),
                type = c("a",  "b",  "a",  "b",  "a",  "a"),
                year = c(2000, 2000, 2001, 2003, 2004, 2005))

df$n_total<-cumsum(df$n_new)


df %>%group_by(type) %>%  mutate(ntotalbytype = cumsum(n_new))
库(dplyr)
df=data.frame(n_new=c(1,1,2,4,5,3),
类型=c(“a”、“b”、“a”、“b”、“a”、“a”),
年份=c(2000、2000、2001、2003、2004、2005))
df$n_总计%group_by(type)%%>%mutate(ntotalbytype=cumsum(n_new))
结果:

  n_new   type  year ntotalbytype
  <dbl> <fctr> <dbl>        <dbl>
1     1      a  2000            1
2     1      b  2000            1
3     2      a  2001            3
4     4      b  2003            5
5     5      a  2004            8
6     3      a  2005           11 
n_新类型年ntotalbytype
1 a 2000 1
2 1 b 2000 1
3 2 a 2001 3
4 b 2003 5
5 a 2004 8
6 3 a 2005 11

查看:?谢谢您的回答!后来我才意识到,我不能使用
cumsum()
只对每种类型的计数求和(我认为这很简单,但我没有找到解决方案)。因此,我对我的问题做了一点修改,增加了难度。没问题,请看上面对答案的编辑。