Как создать матрицу присутствия / отсутствия вида по широте / длине данных с использованием R - PullRequest
0 голосов
/ 11 октября 2019

У меня есть длинный список нескольких видов с широтой / долготой данных.

Sample Data

Я хочу сгенерировать матрицу присутствия-отсутствия (1,0) для всех видов, используя данные широты / долготы. Тем не менее, есть случай, когда несколько видов встречаются в одном и том же широте / месте (сайте). Как я могу рассмотреть это в R и получить образец данных ниже.

Desired matrix

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

Достаточно легко сделать с tidyverse . Сначала несколько примеров данных:

library(tidyverse)

df <- tibble(
  Sp = c('SP1', 'SP1', 'SP2', 'SP2', 'SP2'),
  Long = c(118, 119, 118, 119, 119),
  Lat = c(10, 11, 10, 11, 12)
)

  Sp     Long   Lat
  <chr> <dbl> <dbl>
1 SP1     118    10
2 SP1     119    11
3 SP2     118    10
4 SP2     119    11
5 SP2     119    12

А затем операция поворота. spread был недавно заменен pivot_wider в tidyr (хотя spread все еще будет поддерживаться на данный момент).

df2 <- df %>% 
  mutate(present = 1) %>% # create a dummy column
  pivot_wider(names_from = Sp, values_from = present) %>% # turn 'Sp' column into 'SP1' and 'SP2'
  mutate_at(vars(SP1, SP2), ~ifelse(is.na(.), 0, 1)) # fill in missing columns with 0

   Long   Lat   SP1   SP2
  <dbl> <dbl> <dbl> <dbl>
1   118    10     1     1
2   119    11     1     1
3   119    12     0     1
0 голосов
/ 11 октября 2019

Создайте новую переменную для местоположения, объединив широту:

table <- table%>%mutate(location = paste(long,lat,sep="/"))

Затем разложите таблицу

table <- table%>%spread(Sp,location)

Затем сделайте ее фиктивной

table[,3:4] <- ifelse(is.na(table[,3:4]),0,1)

MakeОбязательно измените числа 3:4 в соответствии с количеством столбцов, которые у вас будут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...