创建一个条件,条件是R中其他列中的值

时间:2017-03-20 21:02:58

标签: 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的组合识别)。结果表看起来应该类似< / p>

    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”,这将是一个缓慢的过程。

2 个答案:

答案 0 :(得分:4)

让我们使用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

答案 1 :(得分:1)

以下是ActiveSheet选项base R

ave

或使用df$newField <- with(df, ave(flagTag, ID1, ID2, FUN = cumsum)+1) df$newField #[1] 1 1 1 1 2 2 2

data.table