作者chuubbyy (byetos)
看板R_Language
标题Re: [问题] 用回圈整理同个ID的看病次数
时间Tue Jun 12 17:02:40 2018
※ 引述《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"]
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 101.10.51.71
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1528794162.A.83A.html
1F:推 locka: 可以请教一下大大 [, .SD[.N], by="id"]的意思吗?谢谢 06/12 18:42
2F:→ andrew43: 每个id最後一笔的所有栏位 06/12 18:46
3F:→ andrew43: .N 表示有几列 .SD[.N]就变成所有栏的最後一列 06/12 18:48
4F:→ andrew43: 至於第一个逗号之前空白,表示资料没有预先任何筛选 06/12 18:49
5F:→ andrew43: data.table 语法比较特别,多看多用就习惯了 06/12 18:50
6F:推 piggood: 学到新招~~感谢大大 06/20 17:01