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

如何解决使用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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?