Advertisement
Guest User

Untitled

a guest
Jun 18th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.86 KB | None | 0 0
  1. id date
  2. 1 1 23-04
  3. 2 1 23-04
  4. 3 1 <NA>
  5. 4 1 <NA>
  6. 5 2 24-04
  7. 6 2 <NA>
  8. 7 2 <NA>
  9. 8 2 <NA>
  10. 9 3 23-04
  11. 10 3 <NA>
  12. 11 3 <NA>
  13. 12 3 <NA>
  14. 13 4 <NA>
  15. 14 4 <NA>
  16. 15 4 <NA>
  17. 16 4 <NA>
  18.  
  19. id date
  20. 1 1 23-04
  21. 2 1 23-04
  22. 3 1 23-04
  23. 4 1 23-04
  24. 5 2 24-04
  25. 6 2 24-04
  26. 7 2 24-04
  27. 8 2 24-04
  28. 9 3 23-04
  29. 10 3 23-04
  30. 11 3 23-04
  31. 12 3 23-04
  32. 13 4 <NA>
  33. 14 4 <NA>
  34. 15 4 <NA>
  35. 16 4 <NA>
  36.  
  37. for(i in 2:nrow(dta)){
  38. if(dta$id[i-1] == dta$id[i])
  39. {
  40. dta$date[i] = dta$date[i-1]
  41. }
  42. }
  43.  
  44. dta = structure(list(id = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,
  45. 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L), .Label = c("1", "2", "3", "4"
  46. ), class = "factor"), date = structure(c(1L, 1L, 1L, 1L, 2L,
  47. 2L, 2L, 2L, 1L, 1L, 1L, 1L, NA, NA, NA, NA), .Label = c("23-04",
  48. "24-04"), class = "factor")), .Names = c("id", "date"), row.names = c(NA,
  49. -16L), class = "data.frame")
  50.  
  51. # test data
  52. x <- read.table(text="id;date
  53. 1;23-04
  54. 1;23-04
  55. 1;NA
  56. 1;NA
  57. 2;24-04
  58. 2;NA
  59. 2;NA
  60. 2;NA
  61. 3;23-04
  62. 3;NA
  63. 3;NA
  64. 3;NA
  65. 4;NA
  66. 4;NA
  67. 4;NA
  68. 4;NA", header=TRUE, sep=";")
  69.  
  70. library("dplyr")
  71. library("zoo")
  72.  
  73. x %>% group_by(id) %>% transmute(date=na.locf(date, na.rm=FALSE))
  74. Source: local data frame [16 x 2]
  75. Groups: id
  76.  
  77. id date
  78. 1 1 23-04
  79. 2 1 23-04
  80. 3 1 23-04
  81. 4 1 23-04
  82. 5 2 24-04
  83. 6 2 24-04
  84. 7 2 24-04
  85. 8 2 24-04
  86. 9 3 23-04
  87. 10 3 23-04
  88. 11 3 23-04
  89. 12 3 23-04
  90. 13 4 NA
  91. 14 4 NA
  92. 15 4 NA
  93. 16 4 NA
  94.  
  95. # Create data.table
  96.  
  97. dtk <- data.table( var=c(NA,NA,1,NA,NA,2,3,NA,NA,NA,NA,4,5,NA,NA,NA,NA,NA,6,7,NA,NA), group=c("A","A","A","A","A","A","A","A","A","B","B","B","B","B","B","B","B","B","B","B","B","B"))
  98.  
  99. # Backward fill
  100.  
  101. dtk[,order:= (1:.N)];
  102. setorder(dtk,-order);
  103. dtk[, var_backward_fill := var[1], by= .( group , cumsum(!is.na(var))) ];
  104. setorder(dtk, order);
  105. dtk[,order:= NULL];
  106.  
  107. # Forward fill
  108.  
  109. dtk[, var_forward_fill := var[1], by= .( group , cumsum(!is.na(var))) ]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement