[問題] 大筆data frame資料的處理

看板R_Language作者 (山裡的人)時間10年前 (2015/10/08 17:15), 10年前編輯推噓2(208)
留言10則, 3人參與, 最新討論串1/2 (看更多)
[問題類型]: 效能諮詢(我想讓R 跑更快) [軟體熟悉度]: 請把以下不需要的部份刪除 使用者(已經有用R 做過不少作品) [問題敘述]: 將data frame當中重複出現二次以上的資料抓出,並求取某個欄位的平均值 我有一個含有接近四百萬比資料的data frame, 格式大概長這個樣子 ID1 ID2 Name1 Name2 Value ------------------------------------- m001 g001 mm1 gg1 0.5 m001 g001 mm1 gg1 0.6 m002 g001 mm2 gg1 0.3 m002 g002 mm2 gg2 0.5 m002 g002 mm2 gg2 0.7 m002 g002 mm2 gg2 0.2 m003 g002 mm3 gg2 0.1 .... .... .... ... ... ------------------------------------ 我想把當中重複出現二次以上的資料抓出來,並計算value欄位的平均 使得資料變成下面這個樣子 ID1 ID2 Name1 Name2 Value ------------------------------------- m001 g001 mm1 gg1 0.55 m002 g002 mm2 gg2 0.47 .... .... .... .... .... ------------------------------------- 用過for loop + aggregate, foreach + doParallel以及用Rcpp寫for loop 的方式去處理過,但是實在是相當慢,foreach+doParallel跟Rcpp for的版本 幾乎都跑了接近快12小時, 不知道版上的各位大大有沒有什麼好的建議? [環境敘述]: 請提供 sessionInfo() 的輸出結果, 裡面含有所有你使用的作業系統、R 的版本和套件版本資訊, 讓版友更容易找出錯誤 [關鍵字]: data frame, subsetting -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.215.230 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1444295729.A.DD1.html ※ 編輯: Godkin (140.116.215.230), 10/08/2015 17:16:36

10/08 17:21, , 1F
有試過直接dplyr嗎
10/08 17:21, 1F

10/08 17:22, , 2F
dat %>% group_by(ID1, ID2, Name1, Name2) %>%
10/08 17:22, 2F

10/08 17:22, , 3F
summarise(value = mean(Value))
10/08 17:22, 3F

10/08 17:30, , 4F
有,但就是卡了個要撈出出現兩次以上的資料,還是跑挺久的
10/08 17:30, 4F

10/08 17:33, , 5F
現在用foreach+doParallel+aggregate+dplyr有比較快了
10/08 17:33, 5F

10/08 17:35, , 6F
summarise直接上length(value)做篩選就好啦
10/08 17:35, 6F

10/08 17:35, , 7F
晚一點來測試速度
10/08 17:35, 7F

10/08 17:36, , 8F
如果四百萬列就要12小時,真的有點誇張
10/08 17:36, 8F

10/08 17:36, , 9F
沒過用length XD, 等等來試試
10/08 17:36, 9F

10/08 18:10, , 10F
我直覺想到先把字串接起來變成新的欄再說...
10/08 18:10, 10F
文章代碼(AID): #1M5ZGntH (R_Language)
文章代碼(AID): #1M5ZGntH (R_Language)