Re: [問題] 依變項分組的加總

看板R_Language作者 (阿吠)時間3年前 (2021/12/05 11:08), 3年前編輯推噓2(208)
留言10則, 2人參與, 3年前最新討論串2/2 (看更多)
下面的討論是錯在細節 語法非常簡單,但一些基本觀念要先知道 之後才不會重複犯錯 ※ 引述《cheen885 ()》之銘言: : 標題: 依變項分組的加總 : 時間: Fri Dec 3 18:24:00 2021 : : 各位大大好,不好意思 : : 想請問 : : 我手邊有一組資料 : : https://i.imgur.com/w453bWR.jpg
: : : : 因為想依照日期(date)、醫師(doctor )、診間時段(TimeofPeriod)分群,將最右 : 欄的premodel108個數值累加 : : 但是希望可以是 X1-X7、X8-X15的數值分別累加 : : 我打的程式碼是: : : file<-mutate(group_by(file,date,doctor,TimeofPeriod),cum=cumsum(predmodel108 : )) : : 做出來的卻是 X1-X15的累加QQ 其實就如celestialgod大所說,這個應該是對的 等價於 file %>% group_by(date, doctor, TimeofPeriod) %>% mutate(cum=cumsum(predmodel108)) 原PO可以再確認看看 我主要針對下面的討論回覆 : : 想請問我的程式碼應如何修正呢 : : 謝謝大家QQQQ : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.9.114.174 (臺灣) : ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1638527042.A.383.html : ※ 編輯: cheen885 (101.9.114.174 臺灣), 12/03/2021 18:26:59 : 推 locka: file <- file %>% group_by(date, doctor,TimeofPeeiod) %> 12/03 18:43 : 推 locka: % summarise(sum=sum(premodel108) 12/03 18:43 : 推 locka: 然後既然都用 dplyr 了 就用 pipeline 吧 巢狀的程式碼不好 12/03 18:43 : 推 locka: 閱讀 12/03 18:43 此處locka大用summarise,其實mutate和summarise是都可以 但後面誤會原PO的意思 新變項是分組後「逐筆資料」的累加,而不是各小組的累加 應用cumsum而非sum 例如資料a: gp val 1 1 10 2 1 20 3 1 30 4 2 10 5 2 20 用a %>% group_by(gp) %>% summarise(new = sum(val))的話會變成 gp new 1 1 60 2 2 30 而原PO要的則是a %>% group_by(gp) %>% summarise(new = cumsum(val)) gp new 1 1 10 2 1 30 3 1 60 4 2 10 5 2 30 : 嗚謝謝你!!那麼快速回復我好感動 : 不過想請問我跑出來長這樣... : https://i.imgur.com/5mqEZ02.jpg
: 應該如何處理呢QQ : 謝謝你 注意除了sum以外,原PO這裡細節上也犯了一個錯 你賦值的對象是 final09a_new$PTT,而非final09a_new final09a_new$PTT是一個變項而已 但是右邊的內容final09a_new %>% group_by %>% summarise() 是一個資料集 錯誤1.把一個資料集賦值進一個變項,硬套是可以套進去,但絕對不是原PO要的 錯誤2.如上面的例子,用sum的話資料列數會變成分組組數 所以final09a_new$PTT的長度會是final09a_new的列數 右邊的內容則只有341列(因為妳分成341組了) 用summarise有一個問題是,運算出來的dataset會只剩下分組變項 例如上面的例子,原本的val就不見了 如果原PO要保留非分組變項,只希望多一個欄位 建議還是用mutate : ※ 編輯: cheen885 (101.9.114.174 臺灣), 12/03/2021 21:29:11 : → locka: 看錯誤訊息是資料筆數對不起來,剩下沒有可重現錯誤的資料 12/03 21:49 : → locka: 愛莫能助(聳肩 12/03 21:49 : 推 Gjerry: 其實可以考慮用 split 切開 data frame 等用 lapply 處理 12/03 23:38 : → Gjerry: 完再合起來,對於不熟悉的人來說應該比較直覺 12/03 23:38 : → locka: G大 其實我覺得 lapply 也沒有很直觀耶XDDD 12/04 00:06 : 推 chenwz: 因為group_by 分組後的列數跟原本資料對不起來,所以沒辦 12/04 09:19 : → chenwz: 法直接給新欄位。可以重給一個df, 再join起來 12/04 09:19 : 推 Gjerry: 不然用 for loop 也可以,一開始就學 dplyr 我覺得會有點 12/04 15:30 : → Gjerry: 卡卡的 12/04 15:30 : 推 celestialgod: 我覺得原PO一開始就寫對了 原PO要不要檢查一下資料 12/05 01:09 : → celestialgod: ? 12/05 01:09 : → celestialgod: https://reurl.cc/2oqm5X 12/05 01:09 : → celestialgod: 不然試試看data.table 12/05 01:09 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.109.196.250 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1638673712.A.1FF.html ※ 編輯: fox1375 (140.109.196.250 臺灣), 12/05/2021 11:09:35

12/05 12:44, 3年前 , 1F
推fox大,我昨天在捷運上看太快,是我沒正確理解問題就回覆
12/05 12:44, 1F

12/05 12:45, 3年前 , 2F
原來原po要的是累加…(突然覺得好丟臉QQ) summarise的確是
12/05 12:45, 2F

12/05 12:45, 3年前 , 3F
單純用在分組後加總的情況。另外沒想到F大竟然還觀察到賦值
12/05 12:45, 3F

12/05 12:45, 3年前 , 4F
對象錯誤的小細節,請受小弟一拜m(_ _)m
12/05 12:45, 4F

12/05 12:50, 3年前 , 5F
不過還是覺得很奇怪,如果原本寫的是對的怎麼會跑出非預期
12/05 12:50, 5F

12/05 12:50, 3年前 , 6F
的結果(搔頭)
12/05 12:50, 6F
這個要原PO提供完整程式碼才能判斷了 以結果來說顯然是group_by沒有依預期的方式運作 可能是使用錯誤、版本問題或套件的衝突導致 例如同時使用dplyr和plyr兩個套件就會這樣 順便宣導所有plyr的功能dplyr都可以完成 plyr已停止更新,不應再使用 ※ 編輯: fox1375 (140.109.196.250 臺灣), 12/05/2021 13:24:33

12/06 20:44, 3年前 , 7F
謝謝f大!!我有在我的原文補上完整的程式碼,我後來一
12/06 20:44, 7F

12/06 20:44, 3年前 , 8F
直重跑,發現還是一直跑錯,一直找不到內文的照片我到
12/06 20:44, 8F

12/06 20:44, 3年前 , 9F
底要跑對的XD,後來聽取您的建議,不使用plyr的套件,
12/06 20:44, 9F

12/06 20:44, 3年前 , 10F
我就成功跑出我要的結果了!!真的很感謝你的幫忙:D!!
12/06 20:44, 10F
文章代碼(AID): #1Xh2qm7_ (R_Language)
討論串 (同標題文章)
文章代碼(AID): #1Xh2qm7_ (R_Language)