Достаточно легко сделать с 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