Re: [問題] 用迴圈整理同個ID的看病次數

作者: chuubbyy (byetos)   2018-06-12 17:02:40
※ 引述《piggood (成為有品味的男人)》之銘言:
: ※ 引述《ntpuisbest (阿龍)》之銘言:
: : library(COUNT)
: : data(rwm5yr)
: : medical<-rwm5yr
: : https://imgur.com/xLr3I5j
: : 我的目的是像這樣
: : 同個id是同個人
: : 我想要把資料整理成
: : 去計算同個人的 總共 的看病次數
: : 其他的column 就用 同個id最後的 資訊
: : 最後要整理成
: : id docvis age
: : 1 1 56
: : 2 4 48
: : 3 13 62
: : 請問有套件可以做到這件事情嗎
: : 還是怎麼寫這個迴圈呢
: 目前想到的方式
: 但也不是很簡潔
: 不過還能用
: # 先建立一個 medical1 ,除了 docvis 和 hhninc 之外,都取最後一筆觀察值的資料
: medical1 <- medical %>%
: group_by(id) %>%
: summarise_at(vars(-docvis,-hhninc), last)
: # 再建 medical2 專門處理 docvis 跟 hhninc 的各別需求
: medical2 <- medical %>%
: group_by(id) %>%
: summarise(sum(docvis), mean(hhninc))
: # 合併在一起
: medical3 <- data.frame(medical2,medical1)
我都比較建議用data.table的方式,簡潔又快。
library(data.table)
setDT(medical)
medical <- medical[,docvis.sum:=sum(docvis), by = "id"][,hhninc.mean:=mean(hhninc), by =
"id"][, .SD[.N], by = "id"]
上面是data.table特殊chaining方式,若要考慮易讀性可以分3行。
medical[,docvis.sum:=sum(docvis), by = "id"]
medical[,hhninc.mean:=mean(hhninc), by = "id"]
medical <- medical[, .SD[.N], by = "id"]
或是pipe的方式。
medical <- medical[,docvis.sum:=sum(docvis), by = "id"] %>%
.[,hhninc.mean:=mean(hhninc), by = "id"] %>%
.[, .SD[.N], by = "id"]
作者: locka (locka)   2018-06-12 18:42:00
可以請教一下大大 [, .SD[.N], by="id"]的意思嗎?謝謝
作者: andrew43 (討厭有好心推文後刪文者)   2018-06-12 18:46:00
每個id最後一筆的所有欄位.N 表示有幾列 .SD[.N]就變成所有欄的最後一列至於第一個逗號之前空白,表示資料沒有預先任何篩選data.table 語法比較特別,多看多用就習慣了
作者: piggood (成為有品味的男人)   2018-06-20 17:01:00
學到新招~~感謝大大

Links booklink

Contact Us: admin [ a t ] ucptt.com