我更习惯于使用STATA并尝试切换到R,并且无法使用dplyr/summarize工作来获取此聚合。在R中按日期汇总变量
我有一个数据帧与入场/放电变量,和一系列的二进制(0,1)结果表明药物收到'DrugDate'。
# ID AdmitDate DCdate DrugDate DrugA DrugB .. DrugZ
# 1 03/01/2017 03/04/2017 03/01/2017 1 0 0
# 1 03/01/2017 03/04/2017 03/02/2017 1 0 0
# 1 03/01/2017 03/04/2017 03/02/2017 0 1 0
# 1 03/01/2017 03/04/2017 03/03/2017 1 0 0
# 1 03/01/2017 03/04/2017 03/04/2017 1 0 0
其中每行基本上是一系列病人当天收到的药物的指标。
STEP 1. 我想先巩固数据集,像这样:
# ID AdmitDate DCdate DrugDate DrugA DrugB .. DrugZ
# 1 03/01/2017 03/04/2017 03/01/2017 1 0 0
# 1 03/01/2017 03/04/2017 03/02/2017 1 1 0
# 1 03/01/2017 03/04/2017 03/03/2017 1 0 0
# 1 03/01/2017 03/04/2017 03/04/2017 1 0 0
所以,现在在每天有一列(而在此之前重复DrugDates存在了,当在某个给定的一种药多名天)。
STEP 2
话,我想创建一个新的数据集计数“药物天”,即
# ID AdmitDate DCdate TotDays DrugDaysA DrugDaysB .. DrugZ
# 1 03/01/2017 03/04/2017 4 4 1 0
第二步我想通了,该怎么做,但我想也许是社会必须关于作为数据集来计算的最快方式的意见非常大。我的理解是dplyr通常在计算上是高效的。
我宁愿不只是像做:
DF %>% group_by(id, drugdate) %>% summarise(NewVar = max(DrugA))
由于存在很多变数。
对我来说,定义一个varname列表非常理想,然后使用apply/for-loop来自动执行该过程。
看着你的数据,它似乎你想计算不同的类别和数字的总和。如果(is.factor(x))return(n_distinct(x))else return(sum(x))',我会创建一个函数,如'f < - function(x)',然后简单地运行'df%>%group_by (ID,AdmitDate,DCdate)%>%summarise_each(funs(f))'这似乎达到你所需要的。 –
我认为这给了我第5步第2步?到目前为止,对于第1步,我有'df2 <- df %>%group_by(id,DrugDate)%>%summarise_at(vars(n:N),max)',其中列n:N是我的DrugA通过DrugB变量。 – KevinM