Фильтрация и суммирование, но с сохранением нулей - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть данные, собранные на нескольких сайтах.На каждом участке были идентифицированы виды (Виды) и подсчитаны (Количество).Я также записал расстояние, которое они произошли от меня (Расстояние).Примерный набор данных:

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 видов.

Есть ли лучший способ, которым япропал?

1 Ответ

0 голосов
/ 23 ноября 2018

Мы могли бы 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...