Bucket
Bucket

Reputation: 527

Flag a row in one column based on past value in another column

Probably basic, but I'm banging my head against a wall.

Say I have this data table:

library(data.table)
df <- data.frame(DaystoPeak = c(2,NA,NA,NA,NA,NA,3,NA,NA,NA,NA,NA), 
                 FlagPeak = c(0,0,1,0,0,0,0,0,0,1,0,0))

df <- data.table(df)

df
 #   DaystoPeak FlagPeak
 #1:          2        0
 #2:         NA        0
 #3:         NA        1
 #4:         NA        0
 #5:         NA        0
 #6:         NA        0
 #7:          3        0
 #8:         NA        0
 #9:         NA        0
 #10:        NA        1
 #11:        NA        0
 #12:        NA        0

Basically what I want to do is generate the second column. I was trying out something like:

df <- df[, FlagPeak := 0] 
df <- df[, FlagPeak[.I+2] := ifelse(DaystoPeak == 2, 1, FlagPeak)] 

But it doesn't work... probably a circular reference problem or something. I've tried a few other things but they don't work either :(

Eg:

df <- df[, FlagPeak := ifelse(DaystoPeak == 2, c(0,0,1), FlagPeak)] 

Anyone able to lend a hand?

Upvotes: 3

Views: 97

Answers (1)

eddi
eddi

Reputation: 49448

I think the comments have a lot of good options. I'd probably do this though:

df[, FlagPeak := 0][DaystoPeak + 1:.N, FlagPeak := 1]

This works because df[NA, FlagPeak := 1] doesn't do anything.

Upvotes: 2

Related Questions