这是我的数据:
ID Day number.of.day
ID1 Day1 5
ID1 Day1 5
ID1 Day1 5
ID1 Day1 5
ID1 Day1 5
ID1 Day2 4
ID1 Day2 4
ID1 Day2 4
ID1 Day2 4
ID1 Day3 1
ID1 Day4 1
ID2 Day1 2
ID2 Day1 2
ID2 Day2 3
ID2 Day2 3
ID2 Day2 3
更新:
我想按ID 逐日计算日的晋升,这是预期的结果:
ID Day number.of.day advance
ID1 Day1 5 NA
ID1 Day1 5 NA
ID1 Day1 5 NA
ID1 Day1 5 NA
ID1 Day1 5 NA
ID1 Day2 4 (4-5)/5
ID1 Day2 4 NA
ID1 Day2 4 NA
ID1 Day2 4 NA
ID1 Day3 1 (1-4)/4
ID1 Day4 1 (1-1)/1
ID2 Day1 2 NA
ID2 Day1 2 NA
ID2 Day2 3 (3-2)/2
ID2 Day2 3 NA
ID2 Day2 3 NA
希望得到您的答复!
最佳答案
这是使用data.table
的简单有效的解决方案
library(data.table)
setDT(df)[!duplicated(df), advance := c(NA, diff(number.of.day)/number.of.day[-.N])]
# ID Day number.of.day advance
# 1: ID1 Day1 5 NA
# 2: ID1 Day1 5 NA
# 3: ID1 Day1 5 NA
# 4: ID1 Day1 5 NA
# 5: ID1 Day1 5 NA
# 6: ID1 Day2 4 -0.20
# 7: ID1 Day2 4 NA
# 8: ID1 Day2 4 NA
# 9: ID1 Day2 4 NA
# 10: ID1 Day3 1 -0.75
# 11: ID1 Day4 1 0.00
# 12: ID2 Day1 2 1.00
# 13: ID2 Day1 2 NA
# 14: ID2 Day2 3 0.50
# 15: ID2 Day2 3 NA
# 16: ID2 Day2 3 NA