為什麼這篇r資料分組鄉民發文收入到精華區:因為在r資料分組這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者locka (locka)看板R_Language標題[問題] data frame分群問題時間...
r資料分組 在 營養麵包(呂孟凡營養師) Instagram 的最佳貼文
2021-04-04 15:00:31
[那些年你聽過的營養鬼話#12] 有一次到某生技的工廠觀光, 看見整架滿滿的椰子油,還有它們的宣傳影片, 那個宣傳影片的內容, 只能說我看了差點爆血管😤 一篇JAMA的文章(Ref 1)引用了今年發表的綜合分析(Ref 2), 而這篇綜合分析是篩選出16篇椰子油相關文獻做統計分析。 結果發現,椰...
[問題類型]:
程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
[軟體熟悉度]:
請把以下不需要的部份刪除
入門(寫過其他程式,只是對語法不熟悉)
[問題敘述]:
大家好:
我有一個data table,其中有一個欄位叫做round,記錄每次實驗的數據
大概長這個樣子:
round y
1: 1 19.7
2: 1 7.86
3: 2 8.95
4: 2 10.07
5: 2 15.20
---
10419: 3000 11.81
10420: 3000 8.46
10421: 3000 9.17
想要每 30 round分為一組,計算y的平均
也就是 round 1:30為一組,31:60為第二組...總共有100組
想像中用dplyr的做法應該是
mydt %>% group_by(...) %>% summarise(mean_y=mean(y))
或是新增一個叫做group的欄位
mydt %>% mutate(group=[每30round為一組的寫法]) %>%
group_by(group) %>% summarise(mean_y=mean(y))
可是就是卡在不知道group_by或是mutate裡面不知道怎麼寫比較恰當
感覺沒有很難但實在不知道該從何做起,所以上來請教大家的想法
先謝謝大家了!
[關鍵字]:
group_by, data frame, 分組
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.160.8.213
※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1487722475.A.974.html
※ 編輯: locka (118.160.8.213), 02/22/2017 08:18:42
抱歉我可能描述的不夠清楚
我總共有3000個回合的資料,每個回合產生的y筆數為1-6筆不等
我想要做的是取第1到第30回合(round欄位為1到30者)當第1組
第31到60回合為第2組,第61到90回合為第3組...第2971-3000回合為第100組
去計算各組裡面y的平均
所以預期結果是要產生"100筆"分組的平均資料
cywhale大大感謝您的回覆,我試過您的作法,可是結果還是不太對>"<
照您的做法產生的是3000筆平均(ie.每個回合內y的平均)
※ 編輯: locka (118.160.8.213), 02/22/2017 15:42:28
1600 update: hi,我現在試出一個做法如下:
lapply(seq(1,3000,100),function(start){
end <- start+30
mydt <- filter(round %in% c(start,end)) %>% summarise(mean(y))
}) %>% unlist(use.names=F)
變成計算先要取的round是幾到幾,然後從原資料filter出來後計算平均,
最後再unlist
感覺有點蠢QQ
總覺得應該有data.table的寫法
請大家指教>"<
※ 編輯: locka (118.160.8.213), 02/22/2017 16:10:37
可是執行as.integer(round-1)/30 不是把round除30嗎?(先不考慮前面的+1)
這樣商會有0,0.033,0.066,1,1.33...一直到最後一個值是1
商只會越來越大, 總共會有3000組商
那這樣這樣的分組結果跟單純用round分組是一樣的不是嗎?
我要的不是依照round分組 是想要每30 round分一組而且要照順序
參考您的作法
我有試過as.integer(round-1)%%100 用取餘數的方法分成100組
可是這樣的話就會變成第一組是(1,101,201,301,...2901)這些回合的平均
第二組是(2,201,202,302...2902)...
雖然每組也是30個round但不是我想要的(1,2,3...30),(31,32,33,34..60),
(2971,2972,2973,...3000)...
※ 編輯: locka (118.160.8.213), 02/22/2017 16:32:25
噢噢!!我看懂了!!無條件捨棄小數點,直接依照整數部分來分組
這方法要學起來...(筆記)
那這樣就沒錯了,十分感謝cywhale大大,thanks!!
※ 編輯: locka (118.160.8.213), 02/22/2017 17:55:19