Matriz 0 e 1 e transposição

Oi pessoal!!
Estou procurando um solução para seguinte questão:

Preciso de um input onde tenho sítios únicos nas linhas (Site) e espécies únicas nas colunas(Sp) . Trata-se de uma matriz de 0 e 1, para presença (1) ou ausência (0) da espécie no sítio.
Segue exemplo ilustrando o input que preciso.

Exemplo 1

X1 Sp_1 Sp_2 Sp_3 Sp_4 Sp_5 Sp_6 Sp_7 Sp_8 Sp_9 Sp_10 Sp_11

1 Site_1 1 1 0 1 1 1 0 1 1 1 1
2 Site_2 1 1 1 1 1 1 0 1 1 1 1
3 Site_3 1 1 0 1 1 0 1 1 1 1 0
4 Site_4 1 1 0 0 1 0 0 1 0 0 0
5 Site_5 1 1 1 1 1 1 1 1 0 1 1
6 Site_6 1 1 1 1 1 1 1 0 1 1 0
7 Site_7 1 1 1 1 1 1 1 0 1 1 1
8 Site_8 1 1 1 1 1 1 1 1 1 1 1
9 Site_9 1 1 1 1 1 1 0 1 0 1 1
10 Site_10 1 0 1 0 0 0 1 0 0 0 0

No entanto o que tenho é um input com duas colunas. A coluna de espécies únicas “Sp” e outra coluna “sites” que se repetem (e essa é a questão, pois preciso de sítios únicos como no Exemplo 1). Segue a ilustração do input que tenho.

Exemplo 2

Sp sites

1 Sp_1 Site_3
2 Sp_2 Site_4
3 Sp_3 Site_9
4 Sp_4 Site_9
5 Sp_5 Site_9
6 Sp_6 Site_9
7 Sp_7 Site_22
8 Sp_8 Site_10
9 Sp_9 Site_5
10 Sp_10 Site_1

Achei que fosse simples, mas estou com dificuldade de transformar esse Exemplo2 no Exemplo 1.

Desde já agradeço qualquer sugestão.

Oi, Tainá!

Você consegue fazer isso criando uma coluna de 1s e utilizando a função pivot_wider() do pacote tidyr. Veja um exemplo:

tab <- tibble::tribble(
  ~ especie, ~ sitio, ~presenca,
  "Sp_1", "Site_3",  1,
  "Sp_2", "Site_4", 1,
  "Sp_3", "Site_9", 1,
  "Sp_4", "Site_9", 1,
  "Sp_5", "Site_9", 1,
  "Sp_6", "Site_9", 1,
  "Sp_7", "Site_22", 1,
  "Sp_8", "Site_10", 1,
  "Sp_9", "Site_5", 1,
  "Sp_10", "Site_1", 1
)

# Tabela que você deu como exemplo
# acrescida de uma coluna de 1s
tab
#> # A tibble: 10 x 3
#>    especie sitio   presenca
#>    <chr>   <chr>      <dbl>
#>  1 Sp_1    Site_3         1
#>  2 Sp_2    Site_4         1
#>  3 Sp_3    Site_9         1
#>  4 Sp_4    Site_9         1
#>  5 Sp_5    Site_9         1
#>  6 Sp_6    Site_9         1
#>  7 Sp_7    Site_22        1
#>  8 Sp_8    Site_10        1
#>  9 Sp_9    Site_5         1
#> 10 Sp_10   Site_1         1

# Formato desejado
tab |> 
  tidyr::pivot_wider(
    names_from = sitio,
    values_from = presenca,
    values_fill = 0
  )
#> # A tibble: 10 x 8
#>    especie Site_3 Site_4 Site_9 Site_22 Site_10 Site_5 Site_1
#>    <chr>    <dbl>  <dbl>  <dbl>   <dbl>   <dbl>  <dbl>  <dbl>
#>  1 Sp_1         1      0      0       0       0      0      0
#>  2 Sp_2         0      1      0       0       0      0      0
#>  3 Sp_3         0      0      1       0       0      0      0
#>  4 Sp_4         0      0      1       0       0      0      0
#>  5 Sp_5         0      0      1       0       0      0      0
#>  6 Sp_6         0      0      1       0       0      0      0
#>  7 Sp_7         0      0      0       1       0      0      0
#>  8 Sp_8         0      0      0       0       1      0      0
#>  9 Sp_9         0      0      0       0       0      1      0
#> 10 Sp_10        0      0      0       0       0      0      1

Created on 2021-06-24 by the reprex package (v2.0.0)

Muito obrigada wamorim !! Com sua resposta consegui resolver a situação!!
Vou tentar resumir minha saga:

1- Os dados que tenho são bem maiores que os exemplo que postei aqui. E descobri que as espécies também se repetem, eu achava que só os sítios se repetiam. Então desculpem pela informação equivocada.
2- Via LibreOffice criei a coluna da presença, e aí usei o pacote datapasta para copiar todas as linhas das 3 colunas, isso resultou num script com mais de 35.000 linhas, e por conta disso minha R section travava toda hora antes que eu pudesse executar o script.
3- Contornei o problema anterior via comandado source pra executar esse script imenso. E então funcionou.
4- Adaptei seu código, pois preciso da espécies na colunas os sítios nas linhas. Criei um exemplo para mostrar como o código final ficou:

#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
library(tidyr)


tab <- tibble::tribble(
  ~ especie, ~ sitio, ~presenca,
  "Sp_1", "Site_3",  1,
  "Sp_2", "Site_4", 1,
  "Sp_2", "Site_9", 1,
  "Sp_2", "Site_9", 1,
  "Sp_3", "Site_9", 1,
  "Sp_5", "Site_9", 1,
  "Sp_5", "Site_22", 1,
  "Sp_8", "Site_10", 1,
  "Sp_9", "Site_5", 1,
  "Sp_10", "Site_1", 1
)

tab
#> # A tibble: 10 x 3
#>    especie sitio   presenca
#>    <chr>   <chr>      <dbl>
#>  1 Sp_1    Site_3         1
#>  2 Sp_2    Site_4         1
#>  3 Sp_2    Site_9         1
#>  4 Sp_2    Site_9         1
#>  5 Sp_3    Site_9         1
#>  6 Sp_5    Site_9         1
#>  7 Sp_5    Site_22        1
#>  8 Sp_8    Site_10        1
#>  9 Sp_9    Site_5         1
#> 10 Sp_10   Site_1         1

tab_final <- tab |> 
  distinct() |> 
  group_by(sitio) |> 
  tidyr::pivot_wider(
    names_from = especie,
    values_from = presenca,
    values_fill = 0
  )

tab_final
#> # A tibble: 7 x 8
#> # Groups:   sitio [7]
#>   sitio    Sp_1  Sp_2  Sp_3  Sp_5  Sp_8  Sp_9 Sp_10
#>   <chr>   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 Site_3      1     0     0     0     0     0     0
#> 2 Site_4      0     1     0     0     0     0     0
#> 3 Site_9      0     1     1     1     0     0     0
#> 4 Site_22     0     0     0     1     0     0     0
#> 5 Site_10     0     0     0     0     1     0     0
#> 6 Site_5      0     0     0     0     0     1     0
#> 7 Site_1      0     0     0     0     0     0     1  
<sup>Created on 2021-06-24 by the [reprex package](https://reprex.tidyverse.org) (v2.0.0)</sup>

Mais uma vez, muito obrigada!!