Re: [問題] 依變項分組的加總
下面的討論是錯在細節
語法非常簡單,但一些基本觀念要先知道
之後才不會重複犯錯
※ 引述《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
12/05 12:44, 1F
→
12/05 12:45,
3年前
, 2F
12/05 12:45, 2F
→
12/05 12:45,
3年前
, 3F
12/05 12:45, 3F
→
12/05 12:45,
3年前
, 4F
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
12/06 20:44, 7F
→
12/06 20:44,
3年前
, 8F
12/06 20:44, 8F
→
12/06 20:44,
3年前
, 9F
12/06 20:44, 9F
→
12/06 20:44,
3年前
, 10F
12/06 20:44, 10F
討論串 (同標題文章)
R_Language 近期熱門文章
PTT數位生活區 即時熱門文章