这是我的数据:

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

07-28 09:12