R 按组查找非零值的分数

R 按组查找非零值的分数,r,dplyr,R,Dplyr,我有一个data.frame,如下所示。我想知道按百分比分组的非零总剂量值的比例和是否具有传染性。注意:并非所有百分比组中的行数都相同 df<-data.frame(Total_dose=runif(1000),percent=rep(c("50","60","75","90"),each=250),is_infectious=sample(c(0,1),1000, replace = TRUE)) 期望输出

我有一个data.frame,如下所示。我想知道按
百分比分组的非零
总剂量
值的比例
是否具有传染性
。注意:并非所有百分比组中的行数都相同

df<-data.frame(Total_dose=runif(1000),percent=rep(c("50","60","75","90"),each=250),is_infectious=sample(c(0,1),1000, replace = TRUE))
期望输出:

N Total_dose>0 | percent | is_infectious | fraction
50/56000 | 50 | 1 | 0.0008928571
45000/56000 | 50 | 0 | 0.8035714
2000/56000 | 60 | 1 |
48000/56000 | 60 | 0 |
这方面的尝试基于一个已经消失的答案,并使之成为一般性的答案

df%>%
  rename(variable=percent) %>% 
  select(Total_dose,variable) %>% 
  group_by(variable) %>% 
  mutate(n=n()) %>% 
  collect() %>% 
  group_by(variable) %>% 
  dplyr::summarise(prop_non_zero = round(sum(Total_dose != 0)/ n *100)) %>% 
  group_by(variable) %>% 
  summarise(prop_non_zero=median(prop_non_zero)) %>% 
  arrange(variable)

也许不必比这更复杂:

库(胶水)
df%>%
组别(感染率)%>%
总结(
分数=总和(总剂量!=0)/总和(df$百分比百分比百分比百分比),
`N总剂量>0`=胶水({sum(总剂量!=0)}/{sum(df$百分比百分比百分比)})
)%%>%重新定位(`N总剂量>0`)
输出:


  `N Total_dose>0` percent is_infectious fraction
  <glue>             <dbl>         <dbl>      <dbl>
1 110/250               50             0      0.44 
2 93/250                50             1      0.372
3 86/250                60             0      0.344
4 106/250               60             1      0.424
5 101/250               75             0      0.404
6 104/250               75             1      0.416
7 111/250               90             0      0.444
8 89/250                90             1      0.356


同样的输出。

非常感谢您的回答和帮助!
df%>%
  rename(variable=percent) %>% 
  select(Total_dose,variable) %>% 
  group_by(variable) %>% 
  mutate(n=n()) %>% 
  collect() %>% 
  group_by(variable) %>% 
  dplyr::summarise(prop_non_zero = round(sum(Total_dose != 0)/ n *100)) %>% 
  group_by(variable) %>% 
  summarise(prop_non_zero=median(prop_non_zero)) %>% 
  arrange(variable)

  `N Total_dose>0` percent is_infectious fraction
  <glue>             <dbl>         <dbl>      <dbl>
1 110/250               50             0      0.44 
2 93/250                50             1      0.372
3 86/250                60             0      0.344
4 106/250               60             1      0.424
5 101/250               75             0      0.404
6 104/250               75             1      0.416
7 111/250               90             0      0.444
8 89/250                90             1      0.356