我有一个看起来像这样的数据集
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
在这里,
job2
表示一个虚拟变量,指示一个人是否是 Manager
在那一年与否。我想对这个数据集做两件事:第一,我只想保留当这个人变成Boss
时的那一行。首次。其次,我想查看一个人工作的累积年数 Manager
并将此信息存储在变量 cumu_job2
中.因此,我想拥有:id name year job job2 cumu_job2
1 Jane 1980 Worker 0 0
1 Jane 1981 Manager 1 1
1 Jane 1982 Manager 1 2
1 Jane 1983 Manager 1 3
1 Jane 1984 Manager 1 4
1 Jane 1985 Manager 1 5
1 Jane 1986 Boss 0 0
2 Bob 1985 Worker 0 0
2 Bob 1986 Worker 0 0
2 Bob 1987 Manager 1 1
2 Bob 1988 Boss 0 0
我已经更改了我的示例并包含了 Worker 位置,因为这更多地反射(reflect)了我想要对原始数据集做的事情。此线程中的答案仅在数据集中只有 Managers 和 Boss 时才有效-因此,任何有关使这项工作的建议都很棒。我将不胜感激!!
最佳答案
这是简洁的dplyr
相同问题的解决方案。
注意:确保 stringsAsFactors = FALSE
在读入数据时。
library(dplyr)
dat %>%
group_by(name, job) %>%
filter(job != "Boss" | year == min(year)) %>%
mutate(cumu_job2 = cumsum(job2))
输出:
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
解释
cumu_job2
柱子。 关于r - 如何在R中的一个向量中累积添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21421004/