how to cumulatively add values in one vector in R

前端 未结 5 1618
耶瑟儿~
耶瑟儿~ 2020-12-01 18:54

I have a data set that looks like this

id  name    year    job    job2
1   Jane    1980    Worker  0
1   Jane    1981    Manager 1
1   Jane    1982    Manage         


        
5条回答
  •  余生分开走
    2020-12-01 19:34

    Here is the succinct dplyr solution for the same problem.

    NOTE: Make sure that stringsAsFactors = FALSE while reading in the data.

    library(dplyr)
    dat %>%
      group_by(name, job) %>%
      filter(job != "Boss" | year == min(year)) %>%
      mutate(cumu_job2 = cumsum(job2))
    

    Output:

       id name year     job job2 cumu_job2
    1   1 Jane 1980  Worker    0         0
    2   1 Jane 1981 Manager    1         1
    3   1 Jane 1982 Manager    1         2
    4   1 Jane 1983 Manager    1         3
    5   1 Jane 1984 Manager    1         4
    6   1 Jane 1985 Manager    1         5
    7   1 Jane 1986    Boss    0         0
    8   2  Bob 1985  Worker    0         0
    9   2  Bob 1986  Worker    0         0
    10  2  Bob 1987 Manager    1         1
    11  2  Bob 1988    Boss    0         0
    

    Explanation

    1. Take the dataset
    2. Group by name and job
    3. Filter each group based on condition
    4. Add cumu_job2 column.

提交回复
热议问题