gpt4 book ai didi

r - 如何在R中的一个向量中累积添加值

转载 作者:行者123 更新时间:2023-12-04 02:35:49 27 4
gpt4 key购买 nike

我有一个看起来像这样的数据集

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/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com