[問題] group_by後能否篩選前n筆資料運算

看板R_Language作者 (khkh)時間8年前 (2017/04/04 17:15), 8年前編輯推噓2(204)
留言6則, 2人參與, 最新討論串1/1
程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) 效能諮詢(我想讓R 跑更快) [軟體熟悉度]: 入門(寫過其他程式,只是對語法不熟悉) [問題敘述]: 我有一個資料格式test為: name type score reviews download 1 G1 game 3 1000 5 2 G2 game 4 2000 1000 3 G3 game 4 1000 40 4 M1 music 5 500 60 5 M2 music 2 200 30 6 M3 music 3 300 40 7 M4 music 4 400 50 8 G4 game 4 500 2000 9 G5 game 2 887 700 10 M5 music 1 600 300 依照下載數排序後,我想要取各分類的前3項進行敘述統計分析, 也就是取出編號8.2.9的game,與10.5.7的music。 目前的寫法是利用dplyr的group_by,但是在取各分類的前3項遇到困難... test %>% arrange(-download) %>% group_by(type) %>% summarise(Mean_score = mean(score), Mean_reviews = mean(reviews), Mean_download = mean(download) %>% arrange(-Mean_download) 這樣子就只能取全部分類各變數的平均數而已, 如果我想要加入head(3),該怎麼加入呢? 還是只能笨笨的先將各群拆成各自的資料檔... 然後我也想要藉此取出各分類的前3名, 之前若不分類的話,很好取出前3名的名單: test %>% arrange(-download) %>% head(3) %>% select(name) %>% .$name 但如果要取出各族群各自的前3名,我又卡住了。 [關鍵字]: dplyr, 分類 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.225.51.15 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1491297343.A.DC0.html ※ 編輯: bedroom0204 (36.225.51.15), 04/04/2017 17:23:17 ※ 編輯: bedroom0204 (36.225.51.15), 04/04/2017 17:23:40

04/04 17:58, , 1F
group_by(...)後接%>%top_n(n=i)取各組前i個
04/04 17:58, 1F

04/05 16:25, , 2F
test%>%group_by(type)%>%top_n(n=3,wt=download)%>%su
04/05 16:25, 2F

04/05 16:25, , 3F
mmarise...
04/05 16:25, 3F

04/05 16:26, , 4F
這樣會回傳每個type依照download數排序前三名的各項目
04/05 16:26, 4F

04/05 16:26, , 5F
平均
04/05 16:26, 5F

04/05 16:27, , 6F
如果你最後面還有arrange(... 那就還會再排序一次
04/05 16:27, 6F
謝謝兩位回答,然後我發現...因為我下載數常常會有同樣的數值, 所以幾乎都會超過設定前n名的數量,還以為是自己哪裡寫錯了XD。 ※ 編輯: bedroom0204 (219.68.113.107), 04/06/2017 01:55:23
文章代碼(AID): #1OusG_t0 (R_Language)
文章代碼(AID): #1OusG_t0 (R_Language)