我有一个数据框,如下例所示:
ID <- 1:6
DRUG <- c(1,1,0,1,0,0)
PRD <- c(1,1,2,2,3,3)
MAX <- c(15,20,50,18,80,350)
df <- data.frame(ID,DRUG,PRD,MAX)
我希望将MAX
添加到预定义的时间间隔,并按DRUG
和PRD
为每个类别中ID
的数量制作摘要。
我的数据集比提供的示例大得多。
有没有办法使用dplyr
或任何其他包在R中进行分箱和汇总?
我尝试了这个tapply(df$MAX,cut(df$MAX,4),length)
,但它将数据分成相等的间隔,这不是我想要实现的。此外,它不会按DRUG
和PRD
提供摘要。
更新:我想出了一个更好的解决方案来解决数据框中的变量问题;但是,如果间隔具有NA
个观察数据,则它不会将其保留在输出摘要中。我怎么能在总结中保留它?除了报告n
之外,如何将输出作为百分比。
df %>%
group_by(DRUG,PRD,cut(MAX,breaks=c(0,20,40,60,Inf))) %>%
summarise(n=n())
这给出了:
DRUG PRD cut(MAX, breaks = c(0, 20, 40, 60, In... n
(dbl) (dbl) (fctr) (int)
1 0 2 (40,60] 1
2 0 3 (60,Inf] 2
3 1 1 (0,20] 2
4 1 2 (0,20] 1
所以在这里,例如,DRUG==0
和PRD==2
的区间(0,15)没有出现在摘要中,因为在这个区间内没有任何值。我怎么能即使在该时间间隔内没有任何值,也会有所有的时间间隔(它应该改为NA
)?另外,我如何根据每个中ID
的总数添加一个计算的百分比DRUG
和PRD
类别?
答案 0 :(得分:1)
根据评论和您尝试过的内容,您可以使用以下内容:
tapply(df$MAX,cut(df$MAX, breaks = c(0, 15, 30, 60, 100, Inf)),length)