我有一個訂閱數據幀如下所示。 大約有100萬個唯一ID。 該表列出訂閱狀態。當用戶開始訂閱服務時,狀態字段用'Sub'表示,當用戶取消訂閱時,用'Usub'表示。填補空白行依賴於一個/下一個非空值
dat <- data.frame(ID=c(rep("A",12),(rep("B",12))), Year="2014", Month=rep(seq(1:12),2), Status=NA)
dat$Status[4] <- "Sub"
dat$Status[8] <- "Usub"
dat$Status[17] <- "Usub"
dat$Status[21] <- "Sub"
ID Year Month Status
A 2014 1
A 2014 2
A 2014 3
A 2014 4 Sub
A 2014 5
A 2014 6
A 2014 7
A 2014 8 Usub
A 2014 9
A 2014 10
A 2014 11
A 2014 12
B 2014 1
B 2014 2
B 2014 3
B 2014 4
B 2014 5 Usub
B 2014 6
B 2014 7
B 2014 8
B 2014 9 Sub
B 2014 10
B 2014 11
B 2014 12
C 2014 1 .
. . . .
. . . .
我正在尋找填補每個狀態更新之間的差距。 所需的輸出表將如下所示:
ID Year Month Status
A 2014 1 Usub
A 2014 2 Usub
A 2014 3 Usub
A 2014 4 Sub
A 2014 5 Sub
A 2014 6 Sub
A 2014 7 Sub
A 2014 8 Usub
A 2014 9 Usub
A 2014 10 Usub
A 2014 11 Usub
A 2014 12 Usub
B 2014 1 Sub
B 2014 2 Sub
B 2014 3 Sub
B 2014 4 Sub
B 2014 5 Usub
B 2014 6 Usub
B 2014 7 Usub
B 2014 8 Usub
B 2014 9 Sub
B 2014 10 Sub
B 2014 11 Sub
B 2014 12 Sub
C 2014 1 .
. . . .
. . . .
每個ID具有至少一個狀態值。 如果一個ID的第一個狀態記錄是「Usub」,那麼以前所有月份的狀態都是「Sub」。 (像2014/05 ID B)與此相反,如果第一個狀態記錄與「子」開始,所有的前幾個月的地位是‘Usub’
@MrFlick最後一次觀察可能不會在第一3行爲ID = A和第一4行爲ID = B工作。 – ohmyan
@MrFlick認購數據是不完整的,這意味着第一個非空的狀態可能不是「分」,這可能是「Usub」,在這種情況下,所有的前行實際上是「子」。 – ohmyan
@MrFlick正如帖子中所述。每個ID至少有一個狀態值。 – ohmyan