[問題]資料排序後,如何選取相同key值的第1筆

看板R_Language作者 (日子過的真快阿)時間5年前 (2019/07/07 23:41), 編輯推噓1(1011)
留言12則, 3人參與, 5年前最新討論串1/1
[問題類型]: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) [軟體熟悉度]: 入門(寫過其他程式,只是對語法不熟悉) [問題敘述]: 以往都是用excel作資料分析,僅處理數萬筆資料 但近期因要驗證廠商程式開發之正確性,需對數百萬筆甚至千萬筆以上資料進行通盤驗證 故開始學習R 想請問站內大大有關資料排序後,怎麼選取相同KEY值之第1筆資料 [程式範例]: Data frame舉例如下 PID 所在地 辦理日期 KEY AA 臺北 4/1 AA臺北 AA 臺北 4/15 AA臺北 AA 臺北 7/10 AA臺北 BB 臺中 5/1 BB臺中 BB 臺中 6/10 BB臺中 BB 臺中 7/16 BB臺中 BB 臺中 8/20 BB臺中 ... ... ... ... 僅想選取AA 4/1 BB 5/1等同KEY下辦理日期第1筆資料進行分析 想請問站內大大可否提供些許資訊供參考 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.176.212.49 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1562514065.A.A5D.html

07/08 00:51, 5年前 , 1F
group_by + arrange + slice
07/08 00:51, 1F

07/08 01:41, 5年前 , 2F
key_type_num = length(unique(your_data$KEY))
07/08 01:41, 2F

07/08 01:41, 5年前 , 3F
use_index = cumsum(c(0, table(your_data$KEY)))+1
07/08 01:41, 3F

07/08 01:41, 5年前 , 4F
your_data[use_index[1:key_type_num], ]
07/08 01:41, 4F

07/08 01:42, 5年前 , 5F
or
07/08 01:42, 5F

07/08 01:42, 5年前 , 6F
result = lapply(split(your_data, your_data$KEY),
07/08 01:42, 6F

07/08 01:42, 5年前 , 7F
function(x)head(x, 1))
07/08 01:42, 7F

07/08 01:42, 5年前 , 8F
do.call(rbind, result)
07/08 01:42, 8F

07/08 01:48, 5年前 , 9F
or your_data[!duplicated(your_data$KEY), ]
07/08 01:48, 9F

07/08 02:14, 5年前 , 10F
data.frame用split+do.call,data.table直接上
07/08 02:14, 10F

07/08 02:14, 5年前 , 11F

07/08 02:16, 5年前 , 12F
日期可預先處理並排序會比較穩當。
07/08 02:16, 12F
文章代碼(AID): #1T8XAHfT (R_Language)
文章代碼(AID): #1T8XAHfT (R_Language)