r - 过滤和总结但保持“零”
问题描述
我在多个站点收集了数据。在每个地点,物种被识别(物种)和计数(数量)。我还记录了他们与我发生的距离(距离)。一个样本数据集是:
library(tidyverse)
library(dplyr)
Data <- data.frame(
Site = c("1", "1", "1", "1", "2", "3", "3"),
Species = c("abc", "bcd", "abc", "kjh", "jh", "abc", "gd"),
Number = c(10,1,1,1,1,1,1),
Distance = c("50m", "60m", "In", "In", "Out", "In", "In")
)
我想计算:(A)独特物种的数量和(B)每个地点每个物种的个体数量。但是,我希望过滤掉所有距离 == “Out”。我尝试了以下过滤器:
Filtered <- Data %>%
filter(Distance %in% c(
"50m",
"60m",
"In"))
然后创建了我的摘要:
summary <- Filtered %>%
group_by(Site) %>%
summarize(richness = n_distinct(Species), count = sum(Number))
summary
# A tibble: 2 x 3
Site richness count
<fct> <int> <dbl>
1 1 3 13
2 3 2 2
但我真正需要的是:
# A tibble: 3 x 3
Site richness count
<fct> <int> <dbl>
1 1 3 13
2 2 0 0
3 3 2 2
换句话说,我不希望将“Out”站点包含在汇总计算中,但我想表明在“non-Out”距离处有 0 个物种。
我错过了更好的方法吗?
解决方案
我们可以在步骤group_by
Site
分组后过滤“Out”条目。summarize
library(dplyr)
Data %>%
group_by(Site) %>%
summarize(richness = n_distinct(Species[Distance != "Out"]),
count = sum(Number[Distance != "Out"]))
# Site richness count
# <fct> <int> <dbl>
#1 1 3 13
#2 2 0 0
#3 3 2 2
推荐阅读
- amazon-s3 - 当文件不存在时,AWS Amplify 中的 Storage.get 返回什么?
- reporting-services - SSAS 表格 2016 / SSRS 2016 中的日期参数和值
- java - WSO2IS - 更改主机名后损坏
- apache-spark - 多个键上的 Spark 连接非常慢
- rust - 可以从汇编的角度考虑“let”和其他 Rust 习语吗?
- python - 如何过滤熊猫数据框中按索引分组的重复行?
- python - 如何制作变量列表
- javascript - 如何用嵌套字段的内容替换对象字段?
- java - spring security,spring with jsf 项目用户活动跟踪器
- postgresql - 如何在 Yii2 中使用新创建的自定义 Postgres 模式类型(ENUM)