R:提取在一定条件下在矢量最大值(R: extract maximum value in vecto

2019-10-19 07:07发布

我试图寻找到这表示在公司一个人的职业生涯历史上的一个大的数据集。 我希望看到的岁的人担任的最大数量Manager的条件,此人是在一个下Sales之前成为一个类别Boss (无论多少年之前,这是)。 数据如下所示: job2是一个虚拟变量,说明此人是否是一个Managercumu_job2表示累计岁的人是在Manager位置(仅顺序累计被认为是)。

  id    name    year    job    job2 cumu_job2
    1   Jane    1980    Worker  0   0
    1   Jane    1981    Manager 1   1
    1   Jane    1982    Sales   0   0
    1   Jane    1983    Sales   0   0
    1   Jane    1984    Manager 1   1
    1   Jane    1985    Manager 1   2
    1   Jane    1986    Boss    0   0
    2   Bob     1985    Worker  0   0
    2   Bob     1986    Sales   0   0
    2   Bob     1987    Manager 1   1
    2   Bob     1988    Manager 1   2
    2   Bob     1989    Boss    0   0

通过提取最大岁的人工作,但条件是该人曾在工作的历史Sales我希望的数据有一个表示该信息的另一列:

id  name    year    job    job2    cumu_job2 cumu_max 
        1   Jane    1983    Sales       0       0
        1   Jane    1986    Boss        0       2
        2   Bob     1986    Sales       0       0 
        2   Bob     1989    Boss        0       2

所以,我认为,这需要两个步骤-我第一次只需要解压的情况下从人的举动SalesBoss ,然后存储最大值为每个人在新的向量cumu_max基于cumu_job2

这是一个复杂的过程,所以任何建议将非常感谢...!

我也考虑过为什么下面使用应答dplyr不工作,这里就是我的想法-这一例子表明,所有的人只能成为经理后成为老板,但我也有,看起来像数据点Kevin

id  name    year    job    job2 cumu_job2
        1   Jane    1980    Worker  0   0
        1   Jane    1981    Manager 1   1
        1   Jane    1982    Sales   0   0
        1   Jane    1983    Sales   0   0
        1   Jane    1984    Manager 1   1
        1   Jane    1985    Manager 1   2
        1   Jane    1986    Boss    0   0
        2   Bob     1985    Worker  0   0
        2   Bob     1986    Sales   0   0
        2   Bob     1987    Manager 1   1
        2   Bob     1988    Manager 1   2
        2   Bob     1989    Boss    0   0
        3   Kevin   1991    Manager 1   1
        3   Kevin   1992    Manager 1   2
        3   Kevin   1993    Sales   0   0
        4   Kevin   1994    Boss    0   0

所以,最后,我想

 id name    year    job    cumu_job2 cumu_max 
  1 Jane    1983    Sales       0       0
  1 Jane    1986    Boss        0       2
  2 Bob     1986    Sales       0       0 
  2 Bob     1989    Boss        0       2
  3 Kevin   1993    Sales       0       2
  3 Kevin   1994    Boss        0       2

该dplyr解决方案只吐出了谁从销售去了的人 - 经理 - 老板不考虑经理的可能性 - 销售 - 老板(这是比较观察到我的数据集)。

Answer 1:

这可能不包括在实际数据所有病例但(主要)是你所期待的。 请注意,我说吉尔谁应该根据自己的条件被排除在外。

require(dplyr)
dat <- read.table(header = TRUE, text = "id    name    year    job    job2 cumu_job2
1   Jane    1980    Worker  0   0
1   Jane    1981    Manager 1   1
1   Jane    1982    Sales   0   0
1   Jane    1983    Sales   0   0
1   Jane    1984    Manager 1   1
1   Jane    1985    Manager 1   2
1   Jane    1986    Boss    0   0
2   Bob     1985    Worker  0   0
2   Bob     1986    Sales   0   0
2   Bob     1987    Manager 1   1
2   Bob     1988    Manager 1   2
2   Bob     1989    Boss    0   0
3   Jill    1989    Worker  0   0
3   Jill    1990    Boss    0   0")

dat %.%
  group_by(id) %.%
  mutate(
    all_jobs = sum(unique(job) %in% c("Sales","Manager","Boss")),
    cumu_max = max(cumu_job2)
  ) %.%
  filter(all_jobs == 3, job %in% c("Sales","Boss"))

Source: local data frame [5 x 8]
Groups: id

  id name year   job job2 cumu_job2 all_jobs cumu_max
1  1 Jane 1982 Sales    0         0        3        2
2  1 Jane 1983 Sales    0         0        3        2
3  1 Jane 1986  Boss    0         0        3        2
4  2  Bob 1986 Sales    0         0        3        2
5  2  Bob 1989  Boss    0         0        3        2


文章来源: R: extract maximum value in vector under certain conditions