Подсчитать, где несколько столбцов соответствуют одному столбцу в матрице отсутствия присутствия - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть матрица отсутствия присутствия видов растений, и она выглядит примерно так ...

set.seed(123)
Data <- data.frame(
 endemic = sample(0:1, 10, replace = TRUE),
 val1p1 = sample(0:1, 10, replace = TRUE),
 val1p2 = sample(0:1, 10, replace = TRUE),
 val1p3 = sample(0:1, 10, replace = TRUE),
 val2p1 = sample(0:1, 10, replace = TRUE),
 val2p2 = sample(0:1, 10, replace = TRUE),
 val2p3 = sample(0:1, 10, replace = TRUE))
Data


   endemic invasive val1p1 val1p2 val1p3 val2p1 val2p2 val2p3
1        1        0      0      1      1      0      0      1
2        1        1      0      0      1      1      0      1
3        1        0      1      0      0      0      1      0
4        0        0      0      1      0      0      1      0
5        0        1      1      0      1      1      1      0
6        1        1      0      0      0      1      0      1
7        1        1      0      0      0      1      1      1
8        1        1      1      1      0      1      0      0
9        0        1      1      1      0      0      1      1
10       0        0      1      0      1      0      1      1

Матрица показывает, является ли вид (1-10) эндемичным или инвазивным и присутствовал ли он(1) или отсутствует (0) в сюжете.Участки расположены в разных долинах (val1, val2)

Я хочу узнать, сколько эндемичных видов встречается в долине 1 (val1).Поэтому мне нужно знать общее количество видов, найденных в нескольких столбцах (val1p1, val1p2, val1p3), а затем, сколько из них являются эндемичными (то есть, сколько из них совпадает с «эндемичным» столбцом).

В этом примере общее количество видов в долине 1 составляет 8, из которых 4 являются эндемичными.Результат, который я хочу, это просто количество эндемичных видов в долине 1!

Мой реальный набор данных на самом деле довольно большой, у меня 200 видов на 75 участках в 8 разных долинах, поэтому мне нужно быстро (иш) сделать это!

Очевидно, я могу 'Суммирование строк, так как одни и те же виды появляются на разных участках.Я попытался использовать mutate, чтобы сначала объединить графики для разделения долин ...

Data %>% mutate(val1 = coalesce(va1p1,val1p2,val1p3)

Однако, это не сработало должным образом, так как не все 0 были заменены на 1.

Есть предложения?Я все еще новичок в R.

1 Ответ

0 голосов
/ 26 сентября 2018

первым делом ... дважды проверьте! Duplicate-part !!!

set.seed(123)
df <- data.frame( species = c(1:10),
  endemic = sample(0:1, 10, replace = TRUE),
  invasive = sample(0:1, 10, replace = TRUE),
  val1p1 = sample(0:1, 10, replace = TRUE),
  val1p2 = sample(0:1, 10, replace = TRUE),
  val1p3 = sample(0:1, 10, replace = TRUE),
  val2p1 = sample(0:1, 10, replace = TRUE),
  val2p2 = sample(0:1, 10, replace = TRUE),
  val2p3 = sample(0:1, 10, replace = TRUE))

df

library( tidyverse )

df %>% 
  gather( location, present, matches("^val") ) %>%
  mutate( valley = stringr::str_extract_all( .$location, "\\d", simplify = TRUE )[,1], 
          p      = stringr::str_extract_all( .$location, "\\d", simplify = TRUE )[,2] ) %>%
  filter( valley == 1, present == 1 ) %>%
  #filter out duuplicate species (from the top...) double-check if this is waht you want
  filter( !duplicated( species ) ) 

#   species endemic invasive location present valley p
# 1       1       0        0   val1p1       1      1 1
# 2       4       1        1   val1p1       1      1 1
# 3       6       0        0   val1p1       1      1 1
# 4       7       1        1   val1p1       1      1 1
# 5       8       1        0   val1p1       1      1 1
# 6       5       0        0   val1p2       1      1 2
# 7       9       1        0   val1p2       1      1 2
# 8      10       0        1   val1p3       1      1 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...