我有一个包含以下变量的数据集: 1.小组 2.状态(采取变量1-7)
我需要创建一个满足以下条件的标志: -Flag 1 = 0当Status< 6,否则Flag 1 = 1当Status> = 6时 - 在每组中:如果状态达到6或更高并且回到低于6,则标志1必须保持为1.
所需的表格如下:
答案 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)