我更習慣於使用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