fork(1) download
  1. library(data.table)
  2. library(magrittr)
  3.  
  4. # 讀資料
  5. dt <- fread(
  6. "
  7. PID 所在地 辦理日期 KEY
  8. BB 臺中 6/10 BB臺中
  9. AA 臺北 7/10 AA臺北
  10. BB 臺中 5/1 BB臺中
  11. AA 臺北 4/15 AA臺北
  12. AA 臺北 4/1 AA臺北
  13. BB 臺中 8/20 BB臺中
  14. BB 臺中 7/16 BB臺中
  15. "
  16. ) %>%
  17. as.data.frame
  18. # 留意到我故意把順序打亂
  19.  
  20. #### data.frame的做法
  21. dt1 <- dt
  22. dt1$辦理日期.1 <- as.Date(dt$辦理日期, format = "%m/%d")
  23. # 建新欄位叫辦理日期.1並成為日期物件
  24. dt1 %>%
  25. .[order(.$KEY, .$辦理日期.1),] %>% # 先按KEY與辦理日期.1排序
  26. split(., .$KEY) %>% # 按KEY切開成list
  27. lapply(., function(x)
  28. x[1, ]) %>% # 取出每個元素的第1列
  29. do.call("rbind", .) # 元素間rbind
  30. # PID 所在地 辦理日期 KEY 辦理日期.1
  31. # AA臺北 AA 臺北 4/1 AA臺北 2019-04-01
  32. # BB臺中 BB 臺中 5/1 BB臺中 2019-05-01
  33.  
  34. ##### data.table 做法
  35. dt2 <- dt %>% as.data.table
  36. dt2[, 辦理日期.1 :=
  37. as.Date(辦理日期, format = "%m/%d")] %>% # 令辦理日期.1為日期物件
  38. .[order(辦理日期.1), .SD[1], by = "KEY"] # 按辦理日期排序後
  39. # KEY PID 所在地 辦理日期 辦理日期.1
  40. # 1: AA臺北 AA 臺北 4/1 2019-04-01
  41. # 2: BB臺中 BB 臺中 5/1 2019-05-01
  42.  
Success #stdin #stdout 0.29s 190080KB
stdin
Standard input is empty
stdout
       PID 所在地 辦理日期    KEY 辦理日期.1
AA臺北  AA   臺北      4/1 AA臺北 2019-04-01
BB臺中  BB   臺中      5/1 BB臺中 2019-05-01
      KEY PID 所在地 辦理日期 辦理日期.1
1: AA臺北  AA   臺北      4/1 2019-04-01
2: BB臺中  BB   臺中      5/1 2019-05-01