Guest User

Untitled

a guest
Nov 20th, 2017
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.76 KB | None | 0 0
  1. ID <- c(rep(1,3), rep(3, 5), rep(4,4),rep(5,5))
  2. Begin <- c(0,2.5,3,7,8,7,25,25,10,15,17,20,1,NA,10,11,13)
  3. End <- c(1.5,3.5,6,12,8,11,29,35, 12,19,NA,28,5,20,30,20,25)
  4. df <- data.frame(ID, Begin, End)
  5. df
  6. ID Begin End
  7. 1 1 0.0 1.5
  8. 2 1 2.5 3.5
  9. 3 1 3.0 6.0*
  10. 4 3 7.0 12.0
  11. 5 3 8.0 8.0*
  12. 6 3 7.0 11.0*
  13. 7 3 25.0 29.0
  14. 8 3 25.0 35.0*
  15. 9 4 10.0 12.0
  16. 10 4 15.0 19.0
  17. 11 4 17.0 NA*
  18. 12 4 20.0 28.0
  19. 13 5 1.0 5.0
  20. 14 5 NA 20.0
  21. 15 5 10.0 30.0
  22. 16 5 11.0 20.0*
  23. 17 5 13.0 25.0*
  24.  
  25. ID Begin End Begin_New1
  26. 1 1 0.0 1.5 0.0
  27. 2 1 2.5 3.5 2.5
  28. 3 1 3.0 6.0 3.5*
  29. 4 3 7.0 12.0 7.0
  30. 5 3 8.0 8.0 12.0*
  31. 6 3 7.0 11.0 12.0*
  32. 7 3 25.0 29.0 25.0
  33. 8 3 25.0 35.0 29.0*
  34. 9 4 10.0 12.0 10.0
  35. 10 4 15.0 19.0 15.0
  36. 11 4 17.0 NA 19.0*
  37. 12 4 20.0 28.0 20.0
  38. 13 5 1.0 5.0 1.0
  39. 14 5 NA 20.0 NA
  40. 15 5 10.0 30.0 20.0*
  41. 16 5 11.0 20.0 30.0*
  42. 17 5 13.0 25.0 30.0*
  43.  
  44. setDT(df)[, Begin_New := shift(End), by = ID][!which(Begin < Begin_New), Begin_New:= Begin]
  45. ID Begin End Begin_New
  46. 1: 1 0.0 1.5 0.0
  47. 2: 1 2.5 3.5 2.5
  48. 3: 1 3.0 6.0 3.5
  49. 4: 3 7.0 12.0 7.0
  50. 5: 3 8.0 8.0 12.0
  51. 6: 3 7.0 11.0 8.0
  52. 7: 3 25.0 29.0 25.0
  53. 8: 3 25.0 35.0 29.0
  54. 9: 4 10.0 12.0 10.0
  55. 10: 4 15.0 19.0 15.0
  56. 11: 4 17.0 NA 19.0
  57. 12: 4 20.0 28.0 20.0
  58. 13: 5 1.0 5.0 1.0
  59. 14: 5 NA 20.0 NA
  60. 15: 5 10.0 30.0 20.0
  61. 16: 5 11.0 20.0 30.0
  62. 17: 5 13.0 25.0 20.0
  63.  
  64. df[, Begin_New := {
  65. high_so_far = shift(cummax(End), fill=Begin[1L])
  66. w = which(Begin < high_so_far)
  67. Begin[w] = high_so_far[w]
  68.  
  69. Begin
  70. }, by=ID]
Add Comment
Please, Sign In to add comment