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

标签 r row cumulative-sum dplyr

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

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/

    相关文章:

    r - 使用 R 中的 Survey 包进行单向方差分析

    r - ggplot2 增加堆叠文本标签之间的间距

    Flutter - 在额外滚动条上显示行 - 列顶部(就像 Whatsapp 存档的聊天记录)

    mysql - 如何将 table1 中的行与 table2 中的数据连接,其中 table2 中的所有数据都具有 table1 中的行 id

    sql - 更新两列排序的累积总和

    r - R 中的 Monthplot - 如何更改默认轴,使其从 6 月而不是 1 月开始

    r - 如何根据 R 中矩阵行的唯一组合创建标签?

    list - 如何将值从gsp中的 map 列表传递给 Action ?

    scala - 如何根据 spark 数据框中值的累计和为每一行分配一个类别?

    javascript - 将数组值的总和乘以 react 组件中的输入值相加