how to cumulatively add values in one vector in R

前端 未结 5 1613
耶瑟儿~
耶瑟儿~ 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条回答
  •  猫巷女王i
    2020-12-01 19:50

    I think this does what you want, although the data must be sorted as you have presented it.

    my.df <- read.table(text = '
    id  name    year    job    job2
    1   Jane    1980    Worker  0
    1   Jane    1981    Manager 1
    1   Jane    1982    Manager 1
    1   Jane    1983    Manager 1
    1   Jane    1984    Manager 1
    1   Jane    1985    Manager 1
    1   Jane    1986    Boss    0
    1   Jane    1987    Boss    0
    2   Bob     1985    Worker  0
    2   Bob     1986    Worker  0
    2   Bob     1987    Manager 1
    2   Bob     1988    Boss    0
    2   Bob     1989    Boss    0
    2   Bob     1990    Boss    0
    2   Bob     1991    Boss    0
    2   Bob     1992    Boss    0
    ', header = TRUE, stringsAsFactors = FALSE)
    
    my.seq <- data.frame(rle(my.df$job)$lengths)
    
    my.df$cumu_job2 <- as.vector(unlist(apply(my.seq, 1, function(x) seq(1,x))))
    
    my.df2 <- my.df[!(my.df$job=='Boss' & my.df$cumu_job2 != 1),]
    my.df2$cumu_job2[my.df2$job != 'Manager'] <- 0
    
       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
    9   2  Bob 1985  Worker    0         0
    10  2  Bob 1986  Worker    0         0
    11  2  Bob 1987 Manager    1         1
    12  2  Bob 1988    Boss    0         0
    

提交回复
热议问题