在发生先前的变量值时重复一个值

时间:2017-11-15 08:18:22

标签: r

我有一个包含以下变量的数据集: 1.小组 2.状态(采取变量1-7)

我需要创建一个满足以下条件的标志: -Flag 1 = 0当Status< 6,否则Flag 1 = 1当Status> = 6时 - 在每组中:如果状态达到6或更高并且回到低于6,则标志1必须保持为1.

所需的表格如下:

enter image description here

3 个答案:

答案 0 :(得分:3)

data.table和cummax完成这项工作:

library(data.table)
dt <- data.table(Group = c(1,2,2,3,3,3,3,4,4), 
                 Status = c(1,2,3,7,6,5,4,5,6))
dt[, flag := cummax(Status >= 6), by = Group]
dt

  Group Status flag
1:     1      1    0
2:     2      2    0
3:     2      3    0
4:     3      7    1
5:     3      6    1
6:     3      5    1
7:     3      4    1
8:     4      5    0
9:     4      6    1

答案 1 :(得分:3)

使用ave在每个组中应用自定义功能。

df <- data.frame(Group = c(1,2,2,3,3,3,3,4,4), 
                 Status = c(1,2,3,7,6,5,4,5,6))

df$Flag = ave(df$Status, df$Group, FUN = function(x) {cumsum(x >= 6) > 0})

答案 2 :(得分:1)

  

df $ flag&lt; - ifelse(df $ status&gt; 6,0,1)

     

df $ status&lt; - ifelse(df $ status =&gt; 6,5,df $ status)