计算数据子集的百分比

马格鲁克

我想为每个代表计算我的数据框中每个 DB 的百分比。

这是我的 df:

df <- structure(list(class = c("CL", "CL", "CL", "CL", "CL", "CL", 
"CL", "CL", "CL", "CL", "CL", "CL", "CL", "CL", "CL", "CL", "CL", 
"CL", "CL", "CL", "CL", "CL", "CL", "CL", "CL", "CL", "CL", "CL", 
"CL", "CL", "CL", "CL", "CL", "CL", "CL", "CL", "CL", "CL", "CL", 
"CL", "CL", "CL", "CL", "CL", "CL", "CL", "CL", "CL", "CL", "CL", 
"CL", "CL", "CL", "CL", "CL", "CL", "CL", "CL", "CL", "CL"), 
    DB = c(0L, 4L, 2L, 4L, 2L, 0L, 4L, 2L, 4L, 2L, 0L, 4L, 2L, 
    4L, 2L, 0L, 4L, 2L, 4L, 2L, 0L, 4L, 2L, 4L, 2L, 0L, 4L, 2L, 
    4L, 2L, 0L, 4L, 2L, 4L, 2L, 0L, 4L, 2L, 4L, 2L, 0L, 4L, 2L, 
    4L, 2L, 0L, 4L, 2L, 4L, 2L, 0L, 4L, 2L, 4L, 2L, 0L, 4L, 2L, 
    4L, 2L), rep = c("early1", "early1", "early1", "early1", 
    "early1", "early2", "early2", "early2", "early2", "early2", 
    "early3", "early3", "early3", "early3", "early3", "mid1", 
    "mid1", "mid1", "mid1", "mid1", "mid2", "mid2", "mid2", "mid2", 
    "mid2", "mid3", "mid3", "mid3", "mid3", "mid3", "late1", 
    "late1", "late1", "late1", "late1", "late2", "late2", "late2", 
    "late2", "late2", "late3", "late3", "late3", "late3", "late3", 
    "stat1", "stat1", "stat1", "stat1", "stat1", "stat2", "stat2", 
    "stat2", "stat2", "stat2", "stat3", "stat3", "stat3", "stat3", 
    "stat3"), num = c(0.009523686, 0.043189398, 0.420979104, 
    0.246671197, 3.451885409, 0.007613802, 0.046278008, 0.392051405, 
    0.25502036, 3.159879284, 0.011478203, 0.054305349, 0.464326108, 
    0.307066853, 3.6602462, 0.010537286, 0.04003825, 0.433807129, 
    0.265128974, 3.793074386, 0.007334728, 0.050505078, 0.380642914, 
    0.297303594, 3.223705784, 0.006611086, 0.030062788, 0.368471191, 
    0.196684816, 3.41357708, 0.01118598, 0.079753642, 0.42517786, 
    0.475724091, 3.136961558, 0.011543492, 0.074750731, 0.436643281, 
    0.41869653, 3.16178206, 0.014526945, 0.083030295, 0.421018391, 
    0.453286503, 3.034308389, 0.018963327, 0.134905674, 0.324578481, 
    0.675510653, 2.075633975, 0.020817582, 0.138788879, 0.322903267, 
    0.686792019, 2.160872891, 0.02334196, 0.141525911, 0.326552113, 
    0.705404966, 2.160032852)), row.names = c(NA, -60L), class = c("tbl_df", 
"tbl", "data.frame"), .Names = c("class", "DB", "rep", "num"))

在 excel 中,我将对 DB = 2 的每个单元格求和并除以单元格的总和。如下图所示:在此处输入图片说明

我正在尝试在 R 中做类似的事情。

df_sum <- df %>% group_by( rep, class, DB) %>% summarise_all(funs(sum(.)/sum(class == CL)*100))

但是它有点不工作......任何建议我做错了什么?

最好的,玛格达

CPak

group_by 两次

library(dplyr)
df_sum <- df %>%
             group_by(rep) %>%                     # grouped by rep
             mutate(sum_rep=sum(num)) %>%          # sum of each rep
             group_by(rep,class,DB) %>%            # grouped by DB
             summarise(desired=sum(num)/unique(sum_rep))   # sum(DB)/sum(rep)

输出

      rep class    DB     desired
 1 early1    CL     0 0.002282627
 2 early1    CL     2 0.928243905
 3 early1    CL     4 0.069473468
 4 early2    CL     0 0.001972057
 5 early2    CL     2 0.919988412
 6 early2    CL     4 0.078039532
 7 early3    CL     0 0.002552173
 8 early3    CL     2 0.917096873
 9 early3    CL     4 0.080350953
10  late1    CL     0 0.002709255

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章