作者engfen (宇智波康)
看板R_Language
标题[问题] 多条件分组加总及字串相加
时间Fri Apr 12 21:39:32 2019
[问题类型]:
程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来)
[软体熟悉度]:
新手
[问题叙述]:
我有一组资料,资料格式如下
https://i.imgur.com/twxssIj.png
我想依据住院序号(In_ID)及药物名称(Drug),把当次住院期间,
开同一种学名药的剂量(dose)加总起来,
以及用法(usage)字串相加,
其他栏位(例如病历号、年龄、性别)则保持不变。
并把结果汇出来成另一个档案
希望呈现以下结果
https://i.imgur.com/UD40lg6.png
但一直出现下列错误讯息
Error in `[.data.table`(test, , { :
The items in the 'by' or 'keyby' list are length (1,1). Each must be length
13; the same length as there are rows in x (after subsetting if i is
provided).
完全不知道如何解Bug 只能请各位指点迷津
范例档有放在云端
https://nofile.io/f/yMTmqZody3d/test.xlsx
[程式范例]:
library(readxl)
library(data.table)
test <- read_excel("D:/test.xlsx",sheet = "eng")
setDT(test)
test[,{.(prod=paste("usage"),collapse=",")}, by=.("In_ID", "Drug")]
test[,{dose.sum:=sum("dose")}, by=.("In_ID", "Drug")]
test2 <- test[, .SD[.N], by =.("In_ID", "Drug")]
[环境叙述]:
R version 3.4.4 (2018-03-15)
Windows 10
[关键字]:
多条件相加、字串合并
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 110.50.135.132
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1555076376.A.EFE.html
1F:→ cywhale: 把变数的冒号拿掉 by=.(In_ID, Drug) 还有sum(dose) 04/12 23:20
2F:→ cywhale: 另外你paste的右括号放错位置,应该在collapse之後 04/12 23:21
感谢 看不到自己的盲点,经提醒後 修正程式码 结果就能正确跑出来
不过过程似乎有点琐碎,还在思索如何用magrittr的%>%来改写
-----------------------------------------------------------
test <- read_excel("D:/Desktop/test.xlsx",sheet = "eng")
setDT(test)
A <- test[,{dose.sum =sum(dose)}, by=c("In_ID", "Drug")]
B <- test[,{paste(usage,collapse=",")}, by=c("In_ID", "Drug")]
C <- test[, .SD[.N], by =c("In_ID", "Drug")]
D <- merge(A,B,by=c("In_ID", "Drug") )
E <- merge(C,D,by=c("In_ID", "Drug") )
E$dose<-NULL
E$usage<-NULL
names(E)[c(6,7)] <- c("dose","usage")
------------------------------------------------------------
※ 编辑: engfen (110.50.135.132), 04/13/2019 02:44:08
4F:→ andrew43: 此例 by 也可以略写成 by=In_ID:Drug 04/13 02:39
太感动了 楼上用一行程式码就解决我的问题了
※ 编辑: engfen (110.50.135.132), 04/13/2019 02:47:05
5F:→ andrew43: 你应该只是没有学到 .() 放在 J 和 by 的作用而已。 04/13 02:50
6F:推 cywhale: data.table叫用column变数 .(var) "var"或外围变数 ..var 04/13 07:14