使用dplyr计算两组发生的百分比和频率

问题描述

我正在学习dplyr,并已从类似的帖子中搜索解决方案,但没有发现这种问题的组合。

这是示例数据帧:

long countByUsername(String username);

我需要返回一个数据框,以计算每种独特物种/类型组合的质量百分比,并且我需要在sampleID中出现物种/类型的百分比频率

因此,本例中葡萄/植物的种类/类型的解决方案是 质量百分比=(5 + 2)/(总和(质量)) 频率百分比为2/3,因为该组合在sample1中没有发生。

首先,我尝试了不同的组合,例如:

set.seed(1)
    df <- data.frame(sampleID = c(rep("sample1",2),rep("sample2",3),rep("sample3",4)),species = c("clover","nettle","clover","vine","vine"),type = c("vegetation","seed","vegetation","vegetation"),mass = sample(1:9))

    > df
  sampleID species       type mass
1  sample1  clover vegetation    9
2  sample1  nettle       seed    4
3  sample2  clover vegetation    7
4  sample2  nettle vegetation    1
5  sample2    vine vegetation    2
6  sample3  clover       seed    6
7  sample3  clover vegetation    3
8  sample3  nettle       seed    8
9  sample3    vine vegetation    5

但是葡萄藤/植被的质量为100%?而且我也不知道从那里去获得基于sampleID的百分比频率。

解决方法

不确定我是否正确,但是也许这就是您想要的:

set.seed(1)
df <- data.frame(sampleID = c(rep("sample1",2),rep("sample2",3),rep("sample3",4)),species = c("clover","nettle","clover","vine","vine"),type = c("vegetation","seed","vegetation","vegetation"),mass = sample(1:9))

library(dplyr)

df %>%
  # Add total mass
  add_count(wt = mass,name = "sum_mass") %>%
  # Add total number of samples
  add_count(nsamples = n_distinct(sampleID)) %>%
  # Add sum_mass and nsamples to group_by
  group_by(species,type,sum_mass,nsamples) %>%
  summarize(nsample = n_distinct(sampleID),totmass = sum(mass),.groups = "drop")  %>%
  mutate(percmass = totmass / sum_mass,percfreq = nsample / nsamples)
#> # A tibble: 5 x 8
#>   species type       sum_mass nsamples nsample totmass percmass percfreq
#>   <chr>   <chr>         <int>    <int>   <int>   <int>    <dbl>    <dbl>
#> 1 clover  seed             45        3       1       6   0.133     0.333
#> 2 clover  vegetation       45        3       3      19   0.422     1    
#> 3 nettle  seed             45        3       2      12   0.267     0.667
#> 4 nettle  vegetation       45        3       1       1   0.0222    0.333
#> 5 vine    vegetation       45        3       2       7   0.156     0.667

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...