Reputation: 527
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
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