r - 根据 R 中其他列中的值创建一个序列

标签 r dplyr

我正在使用类似于以下的数据框:

 df = data.frame(ID1 = c(2,2,2,2,2,2,2), 
            ID2 = c(1,1,1,1,1,1,1),
            flagTag = c(0,0,0,0,1,0,0))

我需要创建一个新字段“newField”,以便在 ID1 和 ID2 组内的 flagTag = 1 时值递增(因此唯一记录由 ID1 和 ID2 的组合标识)。结果表应该看起来类似

    ID1 ID2 flagTag newField
  1   2   1       0     1
  2   2   1       0     1
  3   2   1       0     1
  4   2   1       0     1
  5   2   1       1     2
  6   2   1       0     2

我正在尝试使用 dplyr 来执行此操作,但无法想出执行此类操作的逻辑。一种方法是在数据框中逐条记录并循环更新“newField”,这将是一个缓慢的过程。

最佳答案

让我们使用cumsummutate:

library(dplyr)

df %>%
    group_by(ID1, ID2) %>%
    mutate(newField = 1 + cumsum(flagTag))


    ID1   ID2 flagTag newField
  <dbl> <dbl>   <dbl>    <dbl>
1     2     1       0        1
2     2     1       0        1
3     2     1       0        1
4     2     1       0        1
5     2     1       1        2
6     2     1       0        2
7     2     1       0        2

关于r - 根据 R 中其他列中的值创建一个序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42913912/

相关文章:

r - 将第i列转换为j百分比

R:如何在取消嵌套双重嵌套的 tibble 时保留名称?

r - 使用 dplyr 对多列求和

r - R ggmap 缩放和范围有问题吗?

r - 在 dplyr::anti_join() 期间必须使用有效的下标向量子集元素

r - 在 R 函数中存储数据

r dplyr ends_with多个字符串匹配

r - 使用 plyr 在两列上加入两个海量数据帧

regex - 从 R 中的字母数字字符中删除前导零

r - 通过另一个共享因子交叉制表和汇总因子