library(data.table)
library(magrittr)
# 讀資料
"
PID 所在地 辦理日期 KEY
BB 臺中 6/10 BB臺中
AA 臺北 7/10 AA臺北
BB 臺中 5/1 BB臺中
AA 臺北 4/15 AA臺北
AA 臺北 4/1 AA臺北
BB 臺中 8/20 BB臺中
BB 臺中 7/16 BB臺中
"
) %>%
as.data.frame
# 留意到我故意把順序打亂
#### data.frame的做法
dt1 <- dt
dt1$辦理日期.1 <- as.Date(dt$辦理日期, format = "%m/%d")
# 建新欄位叫辦理日期.1並成為日期物件
dt1 %>%
.[order(.$KEY, .$辦理日期.1),] %>% # 先按KEY與辦理日期.1排序
split(., .$KEY) %>% # 按KEY切開成list
lapply(., function(x)
x[1, ]) %>% # 取出每個元素的第1列
do.call("rbind", .) # 元素間rbind
# PID 所在地 辦理日期 KEY 辦理日期.1
# AA臺北 AA 臺北 4/1 AA臺北 2019-04-01
# BB臺中 BB 臺中 5/1 BB臺中 2019-05-01
##### data.table 做法
dt2 <- dt %>% as.data.table
dt2[, 辦理日期.1 :=
as.Date(辦理日期, format = "%m/%d")] %>% # 令辦理日期.1為日期物件
.[order(辦理日期.1), .SD[1], by = "KEY"] # 按辦理日期排序後
# KEY PID 所在地 辦理日期 辦理日期.1
# 1: AA臺北 AA 臺北 4/1 2019-04-01
# 2: BB臺中 BB 臺中 5/1 2019-05-01
bGlicmFyeShkYXRhLnRhYmxlKQpsaWJyYXJ5KG1hZ3JpdHRyKQoKIyDoroDos4fmlpkKZHQgPC0gZnJlYWQoCiAgIgpQSUQgICAg5omA5Zyo5ZywICAg6L6m55CG5pel5pyfICBLRVkKQkIgICAgIOiHuuS4rSAgICAgNi8xMCAgICAgIEJC6Ie65LitCkFBICAgICDoh7rljJcgICAgIDcvMTAgICAgICBBQeiHuuWMlwpCQiAgICAg6Ie65LitICAgICA1LzEgICAgICAgQkLoh7rkuK0KQUEgICAgIOiHuuWMlyAgICAgNC8xNSAgICAgIEFB6Ie65YyXCkFBICAgICDoh7rljJcgICAgIDQvMSAgICAgICBBQeiHuuWMlwpCQiAgICAg6Ie65LitICAgICA4LzIwICAgICAgQkLoh7rkuK0KQkIgICAgIOiHuuS4rSAgICAgNy8xNiAgICAgIEJC6Ie65LitCiAgIgopICU+JQogIGFzLmRhdGEuZnJhbWUKIyDnlZnmhI/liLDmiJHmlYXmhI/miorpoIbluo/miZPkuoIKCiMjIyMgZGF0YS5mcmFtZeeahOWBmuazlQpkdDEgPC0gZHQKZHQxJOi+pueQhuaXpeacny4xIDwtIGFzLkRhdGUoZHQk6L6m55CG5pel5pyfLCBmb3JtYXQgPSAiJW0vJWQiKQojIOW7uuaWsOashOS9jeWPq+i+pueQhuaXpeacny4x5Lim5oiQ54K65pel5pyf54mp5Lu2CmR0MSAlPiUKICAuW29yZGVyKC4kS0VZLCAuJOi+pueQhuaXpeacny4xKSxdICU+JSAjIOWFiOaMiUtFWeiIh+i+pueQhuaXpeacny4x5o6S5bqPCiAgc3BsaXQoLiwgLiRLRVkpICU+JSAgICAgICAgICAgICAgICAgIyDmjIlLRVnliIfplovmiJBsaXN0CiAgbGFwcGx5KC4sIGZ1bmN0aW9uKHgpCiAgICB4WzEsIF0pICU+JSAgICAgIyDlj5blh7rmr4/lgIvlhYPntKDnmoTnrKwx5YiXCiAgZG8uY2FsbCgicmJpbmQiLCAuKSAgICAgICAgICAgICAgICAgIyDlhYPntKDplpNyYmluZAojICAgICAgICBQSUQg5omA5Zyo5ZywIOi+pueQhuaXpeacnyAgICBLRVkg6L6m55CG5pel5pyfLjEKIyBBQeiHuuWMlyAgQUEgICDoh7rljJcgICAgICA0LzEgQUHoh7rljJcgMjAxOS0wNC0wMQojIEJC6Ie65LitICBCQiAgIOiHuuS4rSAgICAgIDUvMSBCQuiHuuS4rSAyMDE5LTA1LTAxCgojIyMjIyBkYXRhLnRhYmxlIOWBmuazlQpkdDIgPC0gZHQgJT4lIGFzLmRhdGEudGFibGUKZHQyWywgIOi+pueQhuaXpeacny4xIDo9CiAgICAgIGFzLkRhdGUo6L6m55CG5pel5pyfLCBmb3JtYXQgPSAiJW0vJWQiKV0gJT4lICMg5Luk6L6m55CG5pel5pyfLjHngrrml6XmnJ/nianku7YKICAuW29yZGVyKOi+pueQhuaXpeacny4xKSwgLlNEWzFdLCBieSA9ICJLRVkiXSAgICAgIyDmjInovqbnkIbml6XmnJ/mjpLluo/lvowKIyAgICAgICBLRVkgUElEIOaJgOWcqOWcsCDovqbnkIbml6XmnJ8g6L6m55CG5pel5pyfLjEKIyAxOiBBQeiHuuWMlyAgQUEgICDoh7rljJcgICAgICA0LzEgMjAxOS0wNC0wMQojIDI6IEJC6Ie65LitICBCQiAgIOiHuuS4rSAgICAgIDUvMSAyMDE5LTA1LTAxCg==