подсчет наличия / отсутствия на основе группы - PullRequest
0 голосов
/ 31 октября 2018

У меня есть фрейм данных, который содержит данные о численности многих видов в двух местах:

        sp1 sp2 sp3 sp4
SiteA   0   12  0   0
SiteA   0   3   0   0
SiteA   1   0   0   0
SiteB   0   0   6   0
SiteB   2   1   1   0
SiteB   0   1   0   8

Я хотел бы рассчитать две вещи:

  1. сколько видов найдено на каждом участке. В этом фиктивном примере есть два вида в SiteA и четыре вида в SiteB.

  2. среднее количество таксонов в каждой строке для каждого сайта. В этом случае 1 для SiteA и 2 для SiteB.

1 Ответ

0 голосов
/ 31 октября 2018

Мне нравится использовать пакеты dplyr и tidyverse для такого рода вопросов об обобщении. Больше здесь: https://dplyr.tidyverse.org/

library(tidyverse)
# First I'd like to reshape into long (aka "tidy") format
df_tidy <- df %>%
  mutate(obs_num = row_number()) %>%  # To keep track of orig row
  gather(sp, count, sp1:sp4)

# First question
df_tidy %>%
  # This gives total counts for all recorded combos of site and species
  count(site, sp, wt = count) %>%
  filter(n > 0) %>%
  count(site)        # Count how many rows (ie species) for each site
## A tibble: 2 x 2
#  site     nn
#  <chr> <int>
#1 SiteA     2
#2 SiteB     4


# Second question
df_tidy %>%
  # Count how many observations had counts > 0 for each site
  count(site, obs_num, wt = count > 0) %>%
  group_by(site) %>%
  summarize(avg_taxa = mean(n))

## A tibble: 2 x 2
#  site  avg_taxa
#  <chr>    <dbl>
#1 SiteA        1
#2 SiteB        2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...