library(renv)
renv::load()
renv::restore() # Install missing librairies.
renv::status() # Check the project state.
library(here)
library(stringr)
library(stringdist)
library(dplyr)
library(riversea)
library(rfishbase)
library(ggplot2)Identify and get missing diet information
Summary
In this notebook we
- identify the species for which we have no prior information on their diet
- check for potential taxonomic issues that we will have to deal with
- use fishbase to get diet information
0. Setup
We load the environment.
Previous information on fish diet can be find on the dataframe hosted at the following address.
url <- "https://raw.githubusercontent.com/CamilleLeclerc/FoodWebsLakeStream/refs/tags/v3.0/data/raw-data/fish_diet_shift.csv"We download it and convert it to a dataframe.
data_folder <- here("data", "coast")
file_name <- "fish_diet.csv"
download.file(url, destfile = here(data_folder, file_name))We can check that the file has been downloaded.
list.files(data_folder, pattern = file_name)[1] "fish_diet.csv"
We then read the file as a dataframe.
d.diet <- read.csv(here(data_folder, file_name))
sp_list.diet <- sort(unique(d.diet$species_name))
sp_list.diet <- str_replace(sp_list.diet, "_", " ")
sp_list.diet [1] "Abramis brama" "Acipenser ruthenus"
[3] "Alburnoides bipunctatus" "Alburnus alburnus"
[5] "Ameiurus melas" "Anguilla anguilla"
[7] "Aspius aspius" "Barbatula barbatula"
[9] "Barbus barbus" "Barbus meridionalis"
[11] "Blicca bjoerkna" "Carassius auratus"
[13] "Carassius carassius" "Carassius gibelio"
[15] "Chelon auratus" "Chelon ramada"
[17] "Chondrostoma nasus" "Chondrostoma toxostoma"
[19] "Cobitis taenia" "Coregonus lavaretus"
[21] "Cottus gobio" "Cottus petiti"
[23] "Cyprinus carpio" "Esox lucius"
[25] "Gambusia affinis" "Gasterosteus aculeatus"
[27] "Gobio gobio" "Gymnocephalus cernua"
[29] "Hypophthalmichthys molitrix" "Lepomis gibbosus"
[31] "Leucaspius delineatus" "Leuciscus burdigalensis"
[33] "Leuciscus cephalus" "Leuciscus idus"
[35] "Leuciscus leuciscus" "Lota lota"
[37] "Micropterus salmoides" "Misgurnus fossilis"
[39] "Neogobius melanostomus" "Oncorhynchus mykiss"
[41] "Pachychilon pictus" "Perca fluviatilis"
[43] "Phoxinus phoxinus" "Ponticola kessleri"
[45] "Pseudorasbora parva" "Pungitius pungitius"
[47] "Rhodeus amarus" "Rutilus rutilus"
[49] "Salaria fluviatilis" "Salvelinus alpinus"
[51] "Salvelinus fontinalis" "Salvelinus namaycush"
[53] "Scardinius erythrophtalmus" "Scardinius hesperidicus"
[55] "Silurus glanis" "Stizostedion lucioperca"
[57] "Telestes souffia" "Thymallus thymallus"
[59] "Tinca tinca" "Trutta fario"
[61] "Zingel asper"
1. Pomet
To identify missing species in this dataframe, we have to load dataframes from sea campagne (solper, pomet, nurse).
pomet <- read.csv(here(data_folder, "poisson_pomet.csv"), sep = ";")
solper <- read.csv(here(data_folder, "captures_SOLPER_2005_2011.csv"), sep = ";")
nurse <- read.csv(here(data_folder, "Captures_Nurse_1980_2023.csv"), sep = ";")
sp_pomet <- unique(pomet$NomScient)
head(sp_pomet)[1] "Abramis" "Abramis brama"
[3] "Abramis brama + Blicca bjoerkna" "Acipenser sturio"
[5] "Agonus cataphractus" "Alburnoides bipunctatus"
sp_solper <- unique(solper$Espece)
head(sp_solper)[1] "CALMLYR" "ENGRENC" "GOBINIG" "POMOMIN" "SOLESOL" "SPRASPR"
sp_nurse <- unique(nurse$Espece)
head(sp_nurse)[1] "Anguilla anguilla" "Crangon crangon" "Platichthys flesus"
[4] "Solea solea" "Trisopterus luscus" "Ciliata mustela"
reftax_file <- "POMET_RefTax_Sp.csv"
reftax <- read.csv(here(data_folder, reftax_file), sep = ";")1.1. Handle taxonomic resolutions: keep only species
is_species <- function(name) grepl(" ", name)
species_only <- sp_pomet[is_species(sp_pomet)]1.2. Handle different genres: keep only fish
remove_non_fish <- function(species_list, reftax) {
sp_df <- data.frame(nom = species_list)
sp_df <- left_join(sp_df, reftax, by = "nom")
sp_df <- sp_df |> filter(phylum == "Chordata" | is.na(phylum))
sp_df$nom
}
fish_only <- remove_non_fish(species_only, reftax)
species_missing <- setdiff(fish_only, sp_list.diet)
species_missing [1] "Abramis brama + Blicca bjoerkna"
[2] "Acipenser sturio"
[3] "Agonus cataphractus"
[4] "Alosa alosa"
[5] "Alosa fallax"
[6] "Ammodytes marinus"
[7] "Ammodytes tobianus"
[8] "Aphia minuta"
[9] "Apletodon dentatus"
[10] "Argyrosomus regius"
[11] "Arnoglossus imperialis"
[12] "Arnoglossus laterna"
[13] "Arnoglossus thori"
[14] "Atherina boyeri"
[15] "Atherina presbyter"
[16] "Balistes capriscus"
[17] "Barbatula barbatulus"
[18] "Belone belone"
[19] "Blennius ocellaris"
[20] "Buglossidium luteum"
[21] "Callionymus lyra"
[22] "Callionymus reticulatus"
[23] "Centrolabrus exoletus"
[24] "Chelidonichthys lucerna"
[25] "Chelon labrosus"
[26] "Ciliata mustela"
[27] "Clupea harengus"
[28] "Conger conger"
[29] "Crystallogobius linearis"
[30] "Ctenolabrus rupestris"
[31] "Cyclopterus lumpus"
[32] "Dicentrarchus labrax"
[33] "Dicentrarchus punctatus"
[34] "Dicologlossa cuneata"
[35] "Diplecogaster bimaculata bimaculata"
[36] "Diplodus annularis"
[37] "Diplodus sargus sargus"
[38] "Diplodus vulgaris"
[39] "Echiichthys vipera"
[40] "Engraulis encrasicolus"
[41] "Entelurus aequoreus"
[42] "Eutrigla gurnardus"
[43] "Gadus morhua"
[44] "Gaidropsarus mediterraneus"
[45] "Gaidropsarus vulgaris"
[46] "Gasterosteus aculeatus aculeatus"
[47] "Gobius cobitis"
[48] "Gobius niger"
[49] "Gobius paganellus"
[50] "Gobiusculus flavescens"
[51] "Gymnocephalus cernuus"
[52] "Hippocampus guttulatus"
[53] "Hippocampus hippocampus"
[54] "Hyperoplus immaculatus"
[55] "Hyperoplus lanceolatus"
[56] "Labrus bergylta"
[57] "Labrus mixtus"
[58] "Labrus viridis"
[59] "Lepadogaster candolii"
[60] "Lepadogaster lepadogaster"
[61] "Limanda limanda"
[62] "Liparis liparis liparis"
[63] "Liparis montagui"
[64] "Lipophrys pholis"
[65] "Liza aurata"
[66] "Liza ramada"
[67] "Merlangius merlangus"
[68] "Merluccius merluccius"
[69] "Microchirus variegatus"
[70] "Mullus barbatus barbatus"
[71] "Mullus surmuletus"
[72] "Mustelus asterias"
[73] "Myoxocephalus scorpius"
[74] "Nerophis lumbriciformis"
[75] "Nerophis maculatus"
[76] "Nerophis ophidion"
[77] "Osmerus eperlanus"
[78] "Pagellus bogaraveo"
[79] "Pagellus erythrinus"
[80] "Parablennius gattorugine"
[81] "Pegusa lascaris"
[82] "Pholis gunnellus"
[83] "Phrynorhombus norvegicus"
[84] "Platichthys flesus"
[85] "Pleuronectes platessa"
[86] "Pollachius pollachius"
[87] "Pomatoschistus lozanoi"
[88] "Pomatoschistus marmoratus"
[89] "Pomatoschistus microps"
[90] "Pomatoschistus minutus"
[91] "Pomatoschistus pictus"
[92] "Raja clavata"
[93] "Raja montagui"
[94] "Raja undulata"
[95] "Rajella fyllae"
[96] "Salaria pavo"
[97] "Salmo salar"
[98] "Salmo trutta fario"
[99] "Salmo trutta trutta"
[100] "Sander lucioperca"
[101] "Sardina pilchardus"
[102] "Scardinius erythrophthalmus"
[103] "Scomber scombrus"
[104] "Scophthalmus maximus"
[105] "Scophthalmus rhombus"
[106] "Scyliorhinus canicula"
[107] "Solea senegalensis"
[108] "Solea solea"
[109] "Sparus aurata"
[110] "Spinachia spinachia"
[111] "Spondyliosoma cantharus"
[112] "Sprattus sprattus"
[113] "Squalius cephalus"
[114] "Symphodus bailloni"
[115] "Symphodus melops"
[116] "Symphodus ocellatus"
[117] "Symphodus roissali"
[118] "Syngnathus abaster"
[119] "Syngnathus acus"
[120] "Syngnathus rostellatus"
[121] "Syngnathus typhle"
[122] "Taurulus bubalis"
[123] "Torpedo marmorata"
[124] "Torpedo torpedo"
[125] "Trachurus trachurus"
[126] "Trigla lyra"
[127] "Trigloporus lastoviza"
[128] "Tripterygion delaisi"
[129] "Trisopterus luscus"
[130] "Trisopterus minutus"
[131] "Umbrina canariensis"
[132] "Umbrina cirrosa"
[133] "Zeugopterus punctatus"
[134] "Zeus faber"
[135] "Zoarces viviparus"
1.3. Handle taxonomic typos
Next, we want to check for mismatch because of typos or alternative taxonomic names. To do so, we compute a string distance to find species with most similar names between our two lists. By doing so, we will be able to quickly identify erroneous mismatch.
similar_name <- lapply(species_missing, function(name) {
distances <- stringdist(name, sp_list.diet, method = "jw")
closest <- sp_list.diet[which.min(distances)]
data.frame(name = name, closest = closest, distance = min(distances))
})
df_strdist <- do.call(rbind, similar_name) |>
arrange(distance)
df_strdist name closest distance
1 Scardinius erythrophthalmus Scardinius erythrophtalmus 0.01234568
2 Gymnocephalus cernuus Gymnocephalus cernua 0.04841270
3 Barbatula barbatulus Barbatula barbatula 0.05087719
4 Gasterosteus aculeatus aculeatus Gasterosteus aculeatus 0.10416667
5 Acipenser sturio Acipenser ruthenus 0.16335979
6 Abramis brama + Blicca bjoerkna Abramis brama 0.19354839
7 Chelon labrosus Chelon auratus 0.20577201
8 Clupea harengus Chelon auratus 0.21150794
9 Myoxocephalus scorpius Gymnocephalus cernua 0.22121212
10 Taurulus bubalis Alburnus alburnus 0.23067496
11 Sander lucioperca Stizostedion lucioperca 0.24404660
12 Merluccius merluccius Leuciscus leuciscus 0.24657999
13 Salaria pavo Salaria fluviatilis 0.24678363
14 Labrus viridis Barbus meridionalis 0.25375940
15 Blennius ocellaris Salvelinus fontinalis 0.25661376
16 Pollachius pollachius Phoxinus phoxinus 0.25669755
17 Diplodus vulgaris Silurus glanis 0.26483321
18 Callionymus reticulatus Alburnoides bipunctatus 0.27195226
19 Arnoglossus laterna Coregonus lavaretus 0.27368421
20 Gobius cobitis Gobio gobio 0.27543290
21 Entelurus aequoreus Alburnus alburnus 0.27640179
22 Centrolabrus exoletus Coregonus lavaretus 0.27652464
23 Gaidropsarus mediterraneus Micropterus salmoides 0.27691589
24 Mullus surmuletus Rutilus rutilus 0.28229352
25 Pholis gunnellus Phoxinus phoxinus 0.28241979
26 Squalius cephalus Scardinius erythrophtalmus 0.28409825
27 Mustelus asterias Gasterosteus aculeatus 0.28717851
28 Ctenolabrus rupestris Chelon auratus 0.28769841
29 Umbrina cirrosa Cyprinus carpio 0.28888889
30 Trisopterus minutus Alburnoides bipunctatus 0.28958265
31 Ciliata mustela Cobitis taenia 0.28968254
32 Sparus aurata Carassius auratus 0.29014123
33 Diplodus annularis Silurus glanis 0.29196729
34 Nerophis maculatus Rhodeus amarus 0.29196729
35 Arnoglossus imperialis Aspius aspius 0.29207459
36 Hyperoplus lanceolatus Coregonus lavaretus 0.29226475
37 Trigloporus lastoviza Micropterus salmoides 0.29365079
38 Salmo trutta fario Trutta fario 0.29377104
39 Agonus cataphractus Rhodeus amarus 0.29448622
40 Labrus mixtus Barbus barbus 0.29807692
41 Gadus morhua Gymnocephalus cernua 0.29898990
42 Merlangius merlangus Salvelinus alpinus 0.29900285
43 Gobius paganellus Salvelinus alpinus 0.29922909
44 Spondyliosoma cantharus Chondrostoma nasus 0.29974695
45 Pagellus erythrinus Salvelinus alpinus 0.30028354
46 Pomatoschistus pictus Aspius aspius 0.30092130
47 Solea solea Ponticola kessleri 0.30134680
48 Symphodus ocellatus Rhodeus amarus 0.30268854
49 Zoarces viviparus Barbus barbus 0.30467572
50 Callionymus lyra Salvelinus alpinus 0.30648148
51 Dicentrarchus punctatus Alburnoides bipunctatus 0.30706522
52 Gobius niger Gobio gobio 0.30772006
53 Symphodus melops Ameiurus melas 0.30952381
54 Labrus bergylta Barbus barbus 0.30997151
55 Zeus faber Zingel asper 0.31031746
56 Diplodus sargus sargus Rhodeus amarus 0.31038961
57 Tripterygion delaisi Barbus meridionalis 0.31167341
58 Argyrosomus regius Aspius aspius 0.31339031
59 Microchirus variegatus Micropterus salmoides 0.31462981
60 Syngnathus acus Salvelinus namaycush 0.31464646
61 Scophthalmus maximus Salvelinus alpinus 0.31481481
62 Sprattus sprattus Aspius aspius 0.31498240
63 Syngnathus rostellatus Coregonus lavaretus 0.31607428
64 Pleuronectes platessa Gasterosteus aculeatus 0.31610750
65 Mullus barbatus barbatus Rutilus rutilus 0.31666667
66 Pagellus bogaraveo Coregonus lavaretus 0.31725146
67 Gaidropsarus vulgaris Micropterus salmoides 0.31807082
68 Pegusa lascaris Coregonus lavaretus 0.31900585
69 Atherina presbyter Acipenser ruthenus 0.31944444
70 Liparis montagui Lota lota 0.31944444
71 Crystallogobius linearis Carassius gibelio 0.31977124
72 Osmerus eperlanus Acipenser ruthenus 0.32026144
73 Trisopterus luscus Carassius auratus 0.32026144
74 Sardina pilchardus Scardinius erythrophtalmus 0.32149217
75 Symphodus roissali Scardinius erythrophtalmus 0.32315832
76 Balistes capriscus Aspius aspius 0.32507123
77 Atherina boyeri Ponticola kessleri 0.32592593
78 Cyclopterus lumpus Rutilus rutilus 0.32592593
79 Parablennius gattorugine Alburnoides bipunctatus 0.32714372
80 Scophthalmus rhombus Barbus barbus 0.32820513
81 Buglossidium luteum Rutilus rutilus 0.32836257
82 Scyliorhinus canicula Gymnocephalus cernua 0.33015873
83 Aphia minuta Tinca tinca 0.33152958
84 Syngnathus typhle Scardinius erythrophtalmus 0.33171730
85 Hyperoplus immaculatus Alburnoides bipunctatus 0.33311375
86 Zeugopterus punctatus Pungitius pungitius 0.33510860
87 Dicologlossa cuneata Coregonus lavaretus 0.33731444
88 Chelidonichthys lucerna Gymnocephalus cernua 0.33757764
89 Apletodon dentatus Alburnoides bipunctatus 0.34008423
90 Pomatoschistus marmoratus Carassius auratus 0.34099548
91 Ammodytes tobianus Cobitis taenia 0.34126984
92 Trachurus trachurus Thymallus thymallus 0.34130781
93 Nerophis ophidion Micropterus salmoides 0.34519141
94 Engraulis encrasicolus Leuciscus cephalus 0.34595960
95 Conger conger Zingel asper 0.34615385
96 Phrynorhombus norvegicus Phoxinus phoxinus 0.34659377
97 Liza aurata Carassius auratus 0.34709844
98 Ammodytes marinus Rhodeus amarus 0.34915966
99 Gobiusculus flavescens Gasterosteus aculeatus 0.34956710
100 Pomatoschistus minutus Gasterosteus aculeatus 0.34956710
101 Solea senegalensis Ponticola kessleri 0.35016835
102 Hippocampus hippocampus Tinca tinca 0.35309618
103 Lipophrys pholis Cyprinus carpio 0.35324074
104 Salmo salar Salvelinus namaycush 0.35340909
105 Spinachia spinachia Salaria fluviatilis 0.35645933
106 Pomatoschistus lozanoi Neogobius melanostomus 0.35656566
107 Syngnathus abaster Scardinius erythrophtalmus 0.35887261
108 Arnoglossus thori Coregonus lavaretus 0.35973512
109 Nerophis lumbriciformis Micropterus salmoides 0.36059351
110 Platichthys flesus Pachychilon pictus 0.36111111
111 Pomatoschistus microps Micropterus salmoides 0.36327561
112 Trigla lyra Tinca tinca 0.36363636
113 Alosa alosa Alburnus alburnus 0.36490960
114 Echiichthys vipera Pachychilon pictus 0.36531987
115 Umbrina canariensis Gambusia affinis 0.36572967
116 Raja clavata Barbatula barbatula 0.36659357
117 Lepadogaster candolii Carassius gibelio 0.36728631
118 Eutrigla gurnardus Carassius auratus 0.36873638
119 Torpedo marmorata Coregonus lavaretus 0.36933838
120 Alosa fallax Anguilla anguilla 0.37091503
121 Hippocampus guttulatus Silurus glanis 0.37157287
122 Rajella fyllae Salaria fluviatilis 0.37750627
123 Scomber scombrus Barbus barbus 0.37820513
124 Diplecogaster bimaculata bimaculata Barbatula barbatula 0.37941729
125 Salmo trutta trutta Lota lota 0.37983849
126 Dicentrarchus labrax Scardinius erythrophtalmus 0.37991453
127 Symphodus bailloni Phoxinus phoxinus 0.38540305
128 Raja undulata Leucaspius delineatus 0.38563289
129 Liparis liparis liparis Barbus barbus 0.38573021
130 Limanda limanda Chelon ramada 0.38792735
131 Liza ramada Abramis brama 0.39410589
132 Lepadogaster lepadogaster Gasterosteus aculeatus 0.39883117
133 Belone belone Acipenser ruthenus 0.40170940
134 Torpedo torpedo Gobio gobio 0.40404040
135 Raja montagui Anguilla anguilla 0.42967572
We see that there are few issues
- Typo for the Scardinius erythro. in the diet species list.
- Outdated taxonomic name for Gymnocephalus cernua.
- Subspecies resolution for Gasterosteus aculeatus.
- Two species in one for Abramis brama + Blicca bjoerkna.
- Outdated taxonomic name for Trutta fario.
species_to_remove <- c(
"Abramis brama + Blicca bjoerkna"
)
species_missing <- species_missing[!(species_missing %in% species_to_remove)]Actually, we can use fishbase for taxonomic issues. Instead of working with raw names, we can ensure that we have validated names, using fishbase functions.
name_diet <- data.frame(original = sp_list.diet)
name_diet$validated <- validate_names(sp_list.diet)
name_diet |> filter(original != validated) original validated
1 Aspius aspius Leuciscus aspius
2 Chondrostoma toxostoma Parachondrostoma toxostoma
3 Leuciscus cephalus Squalius cephalus
4 Pachychilon pictus Pachychilon pictum
5 Salaria fluviatilis Salariopsis fluviatilis
6 Scardinius erythrophtalmus Scardinius erythrophthalmus
7 Stizostedion lucioperca Sander lucioperca
8 Trutta fario Salmo trutta
name_missing <- data.frame(original = species_missing)
name_missing$validated <- validate_names(name_missing$original)
name_missing |> filter(original != validated) original validated
1 Barbatula barbatulus Barbatula barbatula
2 Diplecogaster bimaculata bimaculata Diplecogaster bimaculata
3 Diplodus sargus sargus Diplodus sargus
4 Gasterosteus aculeatus aculeatus Gasterosteus aculeatus
5 Gobiusculus flavescens Pomatoschistus flavescens
6 Gymnocephalus cernuus Gymnocephalus cernua
7 Liparis liparis liparis Liparis liparis
8 Liza aurata Chelon auratus
9 Liza ramada Chelon ramada
10 Mullus barbatus barbatus Mullus barbatus
11 Phrynorhombus norvegicus Zeugopterus norvegicus
12 Salmo trutta fario Salmo trutta
13 Salmo trutta trutta Salmo trutta
14 Trigloporus lastoviza Chelidonichthys lastoviza
missing_pomet <- setdiff(name_missing$validated, name_diet$validated)
length(missing_pomet)[1] 124
1.4. Rare species
Next, we want to compute average abundance for these species to identify potential rare species that wouldn’t be interesting to include.
abundance_pomet <- pomet |>
filter(NomScient %in% missing_pomet) |>
group_by(NomScient) |>
summarise(n = sum(Nind_esp)) |>
arrange(n)
head(abundance_pomet)# A tibble: 6 × 2
NomScient n
<chr> <int>
1 Belone belone 1
2 Crystallogobius linearis 1
3 Diplodus vulgaris 1
4 Gobius cobitis 1
5 Lepadogaster lepadogaster 1
6 Mustelus asterias 1
abundance_rank <- abundance_pomet |>
group_by(n) |>
summarise(count = n())
head(abundance_rank)# A tibble: 6 × 2
n count
<int> <int>
1 1 13
2 2 4
3 3 5
4 4 2
5 5 1
6 6 5
n_min <- 20 # Minimal abundance to be included.
rare_pomet <- abundance_pomet |>
filter(n <= n_min) |>
pull(NomScient)
length(rare_pomet)[1] 43
missing_pomet <- name_missing |>
filter(validated %in% missing_pomet) |>
filter(!original %in% rare_pomet) |>
pull(validated)set_theme(theme_minimal())
ggplot(abundance_rank, aes(x = log(1 + n), y = count)) +
geom_line() +
geom_point() +
labs(x = "Log(1 + total abundance)", y = "Number of species")2. Nurse
length(sp_nurse)[1] 625
We see that we have many species. This probably means that we have many non-fish species that we will have to remove. First, we remove genus to only keep species names.
species_only <- sp_nurse[is_species(sp_nurse)]
length(species_only)[1] 441
Next, we want to remove non-fish species. We load the corresponding reftax table.
list.files(data_folder) [1] "Captures_Nurse_1980_2023.csv"
[2] "captures_SOLPER_2005_2011.csv"
[3] "fish_diet.csv"
[4] "poisson_pomet.csv"
[5] "poisson_tailles_pomet.csv"
[6] "POMET_RefTax_Sp.csv"
[7] "Reftax_Captures_NURSE_DCE_SUIVINOUR_SOLPER_2024.RData"
[8] "Strates_Nurse_1980_2023.csv"
[9] "strates_SOLPER_2005_2011.csv"
[10] "Tailles_Nurse_1980_2023.csv"
[11] "tailles_SOLPER_2005_2011.csv"
[12] "Traits_Nurse_1980_2023.csv"
[13] "traits_SOLPER_2005_2011.csv"
reftax_file <- list.files(data_folder, pattern = "RData")[1]
load(here(data_folder, reftax_file))
reftax <- ESPECE_MAJsp_df <- data.frame(scientificname = species_only)
sp_df <- sp_df |>
left_join(reftax, by = "scientificname") |>
filter(phylum == "Chordata" | is.na(phylum)) |>
filter(class == "Teleostei" | class == "Elasmobranchii" | is.na(class))
fish_only <- sp_df$scientificname
name_nurse <- data.frame(original = fish_only)
name_nurse$validated <- validate_names(name_nurse$original)
name_nurse |> filter(original != validated) original validated
1 Liza ramada Chelon ramada
2 Phrynorhombus norvegicus Zeugopterus norvegicus
3 Liza aurata Chelon auratus
missing_nurse <- setdiff(name_nurse$validated, name_diet$validated)
length(missing_nurse)[1] 101
abundance_nurse <- nurse |>
filter(Espece %in% missing_nurse) |>
group_by(Espece) |>
summarise(n = sum(Nombre, na.rm = TRUE)) |>
arrange(n)
head(abundance_nurse)# A tibble: 6 × 2
Espece n
<chr> <int>
1 Parablennius gattorugine 0
2 Dasyatis pastinaca 1
3 Diplodus sargus 1
4 Lithognathus mormyrus 1
5 Lophius budegassa 1
6 Microstomus kitt 1
rare_nurse <- abundance_nurse |>
filter(n <= n_min) |>
pull(Espece)
length(rare_nurse)[1] 39
missing_nurse <- name_nurse |>
filter(original %in% missing_nurse) |>
filter(!validated %in% rare_nurse) |>
pull(validated)
length(missing_nurse)[1] 60
missing_all <- sort(unique(c(missing_nurse, missing_pomet)))
missing_all [1] "Agonus cataphractus" "Alosa alosa"
[3] "Alosa fallax" "Ammodytes tobianus"
[5] "Aphia minuta" "Argyrosomus regius"
[7] "Arnoglossus laterna" "Arnoglossus thori"
[9] "Atherina boyeri" "Atherina presbyter"
[11] "Buglossidium luteum" "Callionymus lyra"
[13] "Centrolabrus exoletus" "Chelidonichthys cuculus"
[15] "Chelidonichthys lastoviza" "Chelidonichthys lucerna"
[17] "Chelon labrosus" "Ciliata mustela"
[19] "Clupea harengus" "Conger conger"
[21] "Ctenolabrus rupestris" "Dicentrarchus labrax"
[23] "Dicentrarchus punctatus" "Dicologlossa cuneata"
[25] "Diplecogaster bimaculata" "Diplodus annularis"
[27] "Diplodus sargus" "Echiichthys vipera"
[29] "Engraulis encrasicolus" "Engraulis maeoticus"
[31] "Entelurus aequoreus" "Eutrigla gurnardus"
[33] "Gobius niger" "Gobius paganellus"
[35] "Hippocampus guttulatus" "Hippocampus hippocampus"
[37] "Hyperoplus immaculatus" "Hyperoplus lanceolatus"
[39] "Labrus bergylta" "Labrus mixtus"
[41] "Lepadogaster candolii" "Lepidorhombus whiffiagonis"
[43] "Limanda limanda" "Liparis liparis"
[45] "Merlangius merlangus" "Merluccius merluccius"
[47] "Microchirus variegatus" "Mullus barbatus"
[49] "Mullus surmuletus" "Nerophis lumbriciformis"
[51] "Nerophis maculatus" "Nerophis ophidion"
[53] "Osmerus eperlanus" "Parablennius gattorugine"
[55] "Pegusa lascaris" "Platichthys flesus"
[57] "Pleuronectes platessa" "Pollachius pollachius"
[59] "Pomatoschistus flavescens" "Pomatoschistus lozanoi"
[61] "Pomatoschistus marmoratus" "Pomatoschistus microps"
[63] "Pomatoschistus minutus" "Pomatoschistus pictus"
[65] "Raja clavata" "Raja undulata"
[67] "Sardina pilchardus" "Scophthalmus maximus"
[69] "Scophthalmus rhombus" "Scyliorhinus canicula"
[71] "Solea senegalensis" "Solea solea"
[73] "Sparus aurata" "Spinachia spinachia"
[75] "Spondyliosoma cantharus" "Sprattus sprattus"
[77] "Symphodus bailloni" "Symphodus melops"
[79] "Syngnathus acus" "Syngnathus rostellatus"
[81] "Syngnathus typhle" "Taurulus bubalis"
[83] "Torpedo marmorata" "Trachinus draco"
[85] "Trachurus mediterraneus" "Trachurus trachurus"
[87] "Trisopterus luscus" "Trisopterus minutus"
[89] "Umbrina canariensis" "Zeugopterus norvegicus"
[91] "Zeus faber"
3. Solper
length(sp_solper)[1] 59
For Solper, we have code instead of species names.
head(sp_solper)[1] "CALMLYR" "ENGRENC" "GOBINIG" "POMOMIN" "SOLESOL" "SPRASPR"
I cannot find the relation between species code and their scientific name.
4. Get diet data from fishbase
4.1. Missing species from sea campagnes
Now that we have a species list for which we want to get their diet we can scrap fishbase.
Because this step is crucial and is expected to be repeated we implement it directly in our package riversea.
So we can directly obtain diet for all species with a single function call.
diet_category <- get_diet_category(missing_all)
head(diet_category)# A tibble: 6 × 3
species stage prey_category
<chr> <chr> <chr>
1 Agonus cataphractus juv./adults zoobenthos
2 Alosa alosa juv./adults fish
3 Alosa alosa juv./adults plants
4 Alosa alosa juv./adults zooplankton
5 Alosa alosa juv./adults biofilm
6 Alosa alosa juv./adults others
Next, to obtain something similar as the table for riverine fish, we can also extract a wide table.
diet_category_wide <- get_diet_category_wide(missing_all)
head(diet_category_wide)# A tibble: 6 × 10
species stage zoobenthos fish plants zooplankton biofilm detritus
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Agonus cataphractus juv.… 1 0 0 0 0 0
2 Alosa alosa juv.… 0 1 1 1 1 0
3 Alosa fallax recr… 0 0 0 1 0 0
4 Alosa fallax juv.… 0 1 0 1 0 0
5 Ammodytes tobianus recr… 0 0 0 1 0 0
6 Ammodytes tobianus juv.… 1 0 0 1 0 0
# ℹ 2 more variables: phytoplankton <dbl>, macrophyte <dbl>
4.2. Fishbase diet for riverine fish
diet_category <- get_diet_category(name_diet$validated)
head(diet_category)# A tibble: 6 × 3
species stage prey_category
<chr> <chr> <chr>
1 Abramis brama recruits/juv. zooplankton
2 Abramis brama recruits/juv. zoobenthos
3 Abramis brama recruits/juv. detritus
4 Abramis brama juv./adults zoobenthos
5 Abramis brama juv./adults detritus
6 Abramis brama adults zoobenthos
diet_category_wide <- widen_diet_category(diet_category)
head(diet_category_wide)# A tibble: 6 × 9
species stage zooplankton zoobenthos detritus fish macrophyte biofilm
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Abramis brama recr… 1 1 1 0 0 0
2 Abramis brama juv.… 0 1 1 0 0 0
3 Abramis brama adul… 0 1 1 0 0 0
4 Acipenser ruth… recr… 1 1 0 0 0 0
5 Acipenser ruth… larv… 0 1 0 0 0 0
6 Acipenser ruth… juv.… 1 1 0 0 0 0
# ℹ 1 more variable: phytoplankton <dbl>
write.csv(diet_category_wide, here("data", "fishbase_diet_river.csv"))Let’s focus on a single species Abramis brama
diet_category_wide |> filter(species == "Abramis brama")# A tibble: 3 × 9
species stage zooplankton zoobenthos detritus fish macrophyte biofilm
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Abramis brama recrui… 1 1 1 0 0 0
2 Abramis brama juv./a… 0 1 1 0 0 0
3 Abramis brama adults 0 1 1 0 0 0
# ℹ 1 more variable: phytoplankton <dbl>
and compare with the original table that we have downloaded.
d.diet |> filter(species_name == "Abramis_brama") species species_name size_min size_max stage light det biof phytob macroph
1 BRE Abramis_brama 0.0 9.7 1 0 0 0 0 0
2 BRE Abramis_brama 9.8 17.0 2 0 0 0 0 0
3 BRE Abramis_brama 17.1 120.0 3 0 0 1 1 0
4 BRE Abramis_brama 120.1 Inf 4 0 0 1 1 0
phytopl zoopl zoob fish ref_diet ref_ods
1 1 1 0 0 Nunn2012 Garner1996
2 0 1 0 0 Nunn2012 Garner1996
3 0 1 0 0 Garner1996 Persson1998/Specziar2009
4 0 0 1 0 Persson1998/Specziar2009 <NA>
hypoth_ods remark
1 maximum size hypoth ! Bream eats chironomids = zoob_
2 minimum size hypoth ! Bream eats chironomids = zoob_
3 litterature ! Bream eats chironomids = zoob_
4 litterature eats benthic daphnia
4.3. All species
name_diet$validated [1] "Abramis brama" "Acipenser ruthenus"
[3] "Alburnoides bipunctatus" "Alburnus alburnus"
[5] "Ameiurus melas" "Anguilla anguilla"
[7] "Leuciscus aspius" "Barbatula barbatula"
[9] "Barbus barbus" "Barbus meridionalis"
[11] "Blicca bjoerkna" "Carassius auratus"
[13] "Carassius carassius" "Carassius gibelio"
[15] "Chelon auratus" "Chelon ramada"
[17] "Chondrostoma nasus" "Parachondrostoma toxostoma"
[19] "Cobitis taenia" "Coregonus lavaretus"
[21] "Cottus gobio" "Cottus petiti"
[23] "Cyprinus carpio" "Esox lucius"
[25] "Gambusia affinis" "Gasterosteus aculeatus"
[27] "Gobio gobio" "Gymnocephalus cernua"
[29] "Hypophthalmichthys molitrix" "Lepomis gibbosus"
[31] "Leucaspius delineatus" "Leuciscus burdigalensis"
[33] "Squalius cephalus" "Leuciscus idus"
[35] "Leuciscus leuciscus" "Lota lota"
[37] "Micropterus salmoides" "Misgurnus fossilis"
[39] "Neogobius melanostomus" "Oncorhynchus mykiss"
[41] "Pachychilon pictum" "Perca fluviatilis"
[43] "Phoxinus phoxinus" "Ponticola kessleri"
[45] "Pseudorasbora parva" "Pungitius pungitius"
[47] "Rhodeus amarus" "Rutilus rutilus"
[49] "Salariopsis fluviatilis" "Salvelinus alpinus"
[51] "Salvelinus fontinalis" "Salvelinus namaycush"
[53] "Scardinius erythrophthalmus" "Scardinius hesperidicus"
[55] "Silurus glanis" "Sander lucioperca"
[57] "Telestes souffia" "Thymallus thymallus"
[59] "Tinca tinca" "Salmo trutta"
[61] "Zingel asper"
validate_names("Abramis brama")[1] "Abramis brama"
name_all <- data.frame(original = name_diet$original, validated = name_diet$validated, campagne = "river")
n_nurse <- unique(nurse$Espece)
name_nurse <- data.frame(original = n_nurse, validate_names(n_nurse), campagne = "nurse")
n_pomet <- unique(pomet$NomScient)
name_pomet <- data.frame(original = n_pomet, validate_names(n_pomet), campagne = "pomet")
unique(nurse$Espece) [1] "Anguilla anguilla"
[2] "Crangon crangon"
[3] "Platichthys flesus"
[4] "Solea solea"
[5] "Trisopterus luscus"
[6] "Ciliata mustela"
[7] "Liza ramada"
[8] "Osmerus eperlanus"
[9] "Merlangius merlangus"
[10] "Dicentrarchus labrax"
[11] "Sprattus sprattus"
[12] "Clupea harengus"
[13] "Pleuronectes platessa"
[14] "Trachurus trachurus"
[15] "Atherina presbyter"
[16] "Buglossidium luteum"
[17] "Engraulis encrasicolus"
[18] "Echiichthys vipera"
[19] "Alloteuthis"
[20] "Callionymus lyra"
[21] "Chelidonichthys lucerna"
[22] "Pollachius pollachius"
[23] "Raja clavata"
[24] "Scophthalmus maximus"
[25] "Palaemon serratus"
[26] "Raja microocellata"
[27] "Eutrigla gurnardus"
[28] "Merluccius merluccius"
[29] "Dicologlossa cuneata"
[30] "Raja undulata"
[31] "Mullus surmuletus"
[32] "Pagellus bogaraveo"
[33] "Spondyliosoma cantharus"
[34] "Hyperoplus lanceolatus"
[35] "Necora puber"
[36] "Limanda limanda"
[37] "Pegusa lascaris"
[38] "Scophthalmus rhombus"
[39] "Pomatoschistus minutus"
[40] "Sepia officinalis"
[41] "Trisopterus minutus"
[42] "Arnoglossus thori"
[43] "Loligo vulgaris"
[44] "Lophius piscatorius"
[45] "Conger conger"
[46] "Phrynorhombus norvegicus"
[47] "Taurulus bubalis"
[48] "Argyrosomus regius"
[49] "Labrus"
[50] "Umbrina canariensis"
[51] "Solea senegalensis"
[52] "Cancer pagurus"
[53] "Ostrea edulis"
[54] "Liza aurata"
[55] "Alosa alosa"
[56] "Alosa fallax"
[57] "Chelidonichthys cuculus"
[58] "Pecten maximus"
[59] "Trigla lyra"
[60] "Diplodus puntazzo"
[61] "Lophius budegassa"
[62] "Dicentrarchus punctatus"
[63] "Pagellus erythrinus"
[64] "Pagellus acarne"
[65] "Diplodus sargus"
[66] "Raja"
[67] "Arnoglossus laterna"
[68] "Buccinum undatum"
[69] "Gobius niger"
[70] "Sparus aurata"
[71] "Syngnathus acus"
[72] "Symphodus melops"
[73] "Sardina pilchardus"
[74] "Palaemon longirostris"
[75] "Syngnathus rostellatus"
[76] "Aequipecten opercularis"
[77] "Hippocampus hippocampus"
[78] "Torpedo marmorata"
[79] "Magallana gigas"
[80] "Mimachlamys varia"
[81] "Amphiura filiformis"
[82] "Aphrodita aculeata"
[83] "Asterias rubens"
[84] "Liocarcinus"
[85] "Macropodia"
[86] "Ophiura"
[87] "Paguroidea"
[88] "Astropecten irregularis irregularis"
[89] "Philine aperta"
[90] "Sternaspis scutata"
[91] "Owenia fusiformis"
[92] "Turritella communis"
[93] "Aporrhais pespelecani"
[94] "Armina loveni"
[95] "Sipunculus (Sipunculus) nudus"
[96] "Zeus faber"
[97] "Marthasterias glacialis"
[98] "Polybius henslowii"
[99] "Spisula subtruncata"
[100] "Acanthocardia echinata"
[101] "Tritia reticulata"
[102] "Carcinus maenas"
[103] "Cerastoderma edule"
[104] "Mactra stultorum"
[105] "Pharus legumen"
[106] "Abra"
[107] "Spisula"
[108] "Psammechinus miliaris"
[109] "Atelecyclus undecimdentatus"
[110] "Liocarcinus pusillus"
[111] "Liocarcinus navigator"
[112] "Gibbula cineraria"
[113] "Lucinidae"
[114] "Echinocardium cordatum"
[115] "Leptopentacta elongata"
[116] "Sepiola atlantica"
[117] "Acrocnida brachiata"
[118] "Lagis koreni"
[119] "Maldanidae"
[120] "Ebalia tuberosa"
[121] "Chamelea striatula"
[122] "Euspira nitida"
[123] "Mytilus edulis"
[124] "Portumnus latipes"
[125] "Abra tenuis"
[126] "Ammodytes tobianus"
[127] "Veneridae"
[128] "Calliostoma zizyphinum"
[129] "Ocenebra erinaceus"
[130] "Crepidula fornicata"
[131] "Nucula"
[132] "Eurynome aspera"
[133] "Inachus"
[134] "Pandora inaequivalvis"
[135] "Antalis"
[136] "Ebalia"
[137] "Corbula gibba"
[138] "Euspira catena"
[139] "Abra alba"
[140] "Idotea balthica"
[141] "Liocarcinus vernalis"
[142] "Dasyatis pastinaca"
[143] "Phaxas pellucidus"
[144] "Ciona intestinalis"
[145] "Porcellana platycheles"
[146] "Maja brachydactyla"
[147] "Microchirus variegatus"
[148] "Glycymeris glycymeris"
[149] "Raja brachyura"
[150] "Spisula solida"
[151] "Nerophis lumbriciformis"
[152] "Scomber scombrus"
[153] "Donax vittatus"
[154] "Liocarcinus holsatus"
[155] "Ensis siliqua"
[156] "Ascidia"
[157] "Pholas dactylus"
[158] "Goneplax rhomboides"
[159] "Scyliorhinus canicula"
[160] "Limecola balthica"
[161] "Asthenognathus atlanticus"
[162] "Antalis novemcostata"
[163] "Pagurus bernhardus"
[164] "Pagurus cuanensis"
[165] "Ophiura ophiura"
[166] "Diogenes pugilator"
[167] "Crystallogobius"
[168] "Corystes cassivelaunus"
[169] "Fabulina fabula"
[170] "Spiropagurus elegans"
[171] "Liocarcinus marmoreus"
[172] "Ophiura albida"
[173] "Gaidropsarus vulgaris"
[174] "Anapagurus hyndmanni"
[175] "Inachus dorsettensis"
[176] "Annelida"
[177] "Lutraria angustior"
[178] "Rissoides desmaresti"
[179] "Lutraria lutraria"
[180] "Ophiothrix fragilis"
[181] "Inachus phalangium"
[182] "Pagurus prideaux"
[183] "Pisidia longicornis"
[184] "Liocarcinus depurator"
[185] "Pisa tetraodon"
[186] "Myrtea spinifera"
[187] "Nucella lapillus"
[188] "Pilumnus hirtellus"
[189] "Paguridae"
[190] "Haploops"
[191] "Laevicardium crassum"
[192] "Macropodia rostrata"
[193] "Xantho pilipes"
[194] "Melinna palmata"
[195] "Aplysia"
[196] "Diopatra neapolitana"
[197] "Leptosynapta inhaerens"
[198] "Styela clava"
[199] "Euspira fusca"
[200] "Acteon tornatilis"
[201] "Mysia undata"
[202] "Philocheras trispinosus"
[203] "Abra prismatica"
[204] "Alcyonium digitatum"
[205] "Macropodia deflexa"
[206] "Liparis liparis"
[207] "Donax"
[208] "Syngnathus"
[209] "Trachinus draco"
[210] "Myliobatis aquila"
[211] "Oestergrenia digitata"
[212] "Platynereis dumerilii"
[213] "Trivia monacha"
[214] "Gibbula magus"
[215] "Stylarioides moniliferus"
[216] "Glycera unicornis"
[217] "Nephtys hombergii"
[218] "Antalis vulgaris"
[219] "Labioleanira yhleni"
[220] "Nemertea"
[221] "Lanice conchilega"
[222] "Processa"
[223] "Calyptraea chinensis"
[224] "Belone belone"
[225] "Venerupis corrugata"
[226] "Clausinella fasciata"
[227] "Munida rugosa"
[228] "Gobius"
[229] "Crangon allmanni"
[230] "Pandalina brevirostris"
[231] "Ophiocomina nigra"
[232] "Pontophilus spinosus"
[233] "Zeugopterus punctatus"
[234] "Scyliorhinus stellaris"
[235] "Aslia lefevrei"
[236] "Platyhelminthes"
[237] "Callista chione"
[238] "Arcopagia crassa"
[239] "Henricia oculata"
[240] "Nephtys"
[241] "Aphia minuta"
[242] "Doridoidea"
[243] "Actiniaria"
[244] "Arenicola marina"
[245] "Processa edulis crassipes"
[246] "Spisula elliptica"
[247] "Calliactis parasitica"
[248] "Luidia ciliaris"
[249] "Luidia sarsii"
[250] "Alcyonidium"
[251] "Isopoda"
[252] "Athanas nitescens"
[253] "Polititapes rhomboides"
[254] "Ceriantharia"
[255] "Ctenophora"
[256] "Barnea candida"
[257] "Hemigrapsus takanoi"
[258] "Amphipoda"
[259] "Holothuroidea"
[260] "Labrus bergylta"
[261] "Virgularia mirabilis"
[262] "Ascidiacea"
[263] "Venus verrucosa"
[264] "Pollachius virens"
[265] "Abra nitida"
[266] "Chaetopterus variopedatus"
[267] "Echinus esculentus"
[268] "Atelecyclus rotundatus"
[269] "Alcyonium"
[270] "Maja squinado"
[271] "Molgula"
[272] "Sepiolidae"
[273] "Symphodus bailloni"
[274] "Polybius"
[275] "Gari fervensis"
[276] "Virgularia"
[277] "Scaphander lignarius"
[278] "Musculus"
[279] "Anomia ephippium"
[280] "Gibbomodiola adriatica"
[281] "Symphodus roissali"
[282] "Alpheus"
[283] "Timoclea ovata"
[284] "Anapagurus laevis"
[285] "Calliactis palliata"
[286] "Phascolion"
[287] "Rhizostoma pulmo"
[288] "Diopatra"
[289] "Modiolus barbatus"
[290] "Hippocampus guttulatus"
[291] "Ocenebrinae"
[292] "Acanthocardia"
[293] "Sepiola"
[294] "Hemigrapsus"
[295] "Solen marginatus"
[296] "Antedon bifida"
[297] "Porifera"
[298] "Fissurellidae"
[299] "Sparidae"
[300] "Aplysia punctata"
[301] "Sabella pavonina"
[302] "Ruditapes"
[303] "Calliactis"
[304] "Lepadogaster candolii"
[305] "Thyone"
[306] "Ampelisca spinipes"
[307] "Ctenolabrus rupestris"
[308] "Eledone moschata"
[309] "Scalpellum scalpellum"
[310] "Homarus gammarus"
[311] "Macropodia linaresi"
[312] "Nassarius"
[313] "Lutraria"
[314] "Loripes orbiculatus"
[315] "Pherusa"
[316] "Glyceridae"
[317] "Mysidae"
[318] "Flabelligeridae"
[319] "Nephtyidae"
[320] "Flustra foliacea"
[321] "Animalia"
[322] "Idotea"
[323] "Palaemon"
[324] "Cephalopoda"
[325] "Pharus"
[326] "Tritia"
[327] "Cumacea"
[328] "Nereididae"
[329] "Ampelisca"
[330] "Apherusa"
[331] "Maldane glebifex"
[332] "Metridium dianthus"
[333] "Sabellidae"
[334] "Sigalionidae"
[335] "Suberites"
[336] "Eledone cirrhosa"
[337] "Microstomus kitt"
[338] "Polynoidae"
[339] "Spiochaetopterus costarum"
[340] "Phyllodocidae"
[341] "Phallusia mammillata"
[342] "Thyasira flexuosa"
[343] "Sipuncula"
[344] "Eunicidae"
[345] "Solenogastres"
[346] "Cereus pedunculatus"
[347] "Phascolion (Phascolion) strombus strombus"
[348] "Echiura"
[349] "Aphroditiformia"
[350] "Golfingia"
[351] "Astropecten irregularis"
[352] "Pectinaria"
[353] "Rhizostoma octopus"
[354] "Tritia incrassata"
[355] "Muricidae"
[356] "Perforatus perforatus"
[357] "Hydrozoa"
[358] "Molgulidae"
[359] "Terebellidae"
[360] "Nucula nitidosa"
[361] "Grapsidae"
[362] "Mactridae"
[363] "Alcyonidium parasiticum"
[364] "Glycera"
[365] "Urticina felina"
[366] "Hiatella arctica"
[367] "Flustra"
[368] "Ascidiella aspersa"
[369] "Pagurus alatus"
[370] "Galathea squamifera"
[371] "Golfingia (Golfingia) elongata"
[372] "Labrus merula"
[373] "Mimachlamys"
[374] "Epitonium clathrus"
[375] "Alcyonidiidae"
[376] "Loligo"
[377] "Polychaeta"
[378] "Actiniaria incertae sedis"
[379] "Urticina"
[380] "Tunicata"
[381] "Eunicella verrucosa"
[382] "Gammaridae"
[383] "Sertulariidae"
[384] "Tethya aurantium"
[385] "Cliona celata"
[386] "Acanthochitona fascicularis"
[387] "Dendrodoa grossularia"
[388] "Syngnathus typhle"
[389] "Diogenidae"
[390] "Sepia elegans"
[391] "Pagurus"
[392] "Alcyonidium diaphanum"
[393] "Sigalion"
[394] "Munnidae"
[395] "Pontophilus"
[396] "Golfingia (Golfingia) vulgaris vulgaris"
[397] "Terebellides"
[398] "Doris verrucosa"
[399] "Cerianthus"
[400] "Acanthodoris pilosa"
[401] "Cerianthus lloydii"
[402] "Cirripedia"
[403] "Cylichna cylindracea"
[404] "Cerianthidae"
[405] "Amphipholis squamata"
[406] "Caridea"
[407] "Munida"
[408] "Arnoglossus imperialis"
[409] "Macropodia tenuirostris"
[410] "Parvicardium"
[411] "Serpulidae"
[412] "Bryozoa"
[413] "Nucula nucleus"
[414] "Pachymatisma johnstonia"
[415] "Phaeophyceae"
[416] "Ascidia mentula"
[417] "Musculus subpictus"
[418] "Ocinebrellus inornatus"
[419] "Epizoanthidae"
[420] "Harmothoe clavigera"
[421] "Campanulariidae"
[422] "Ascidiella scabra"
[423] "Ensis"
[424] "Nephtys cirrosa"
[425] "Ensis ensis"
[426] "Anomia"
[427] "Fimbriosthenelais minor"
[428] "Molgula manhattensis"
[429] "Serpula vermicularis"
[430] "Styelidae"
[431] "Suberites pagurorum"
[432] "Tritia varicosa"
[433] "Acanthocardia aculeata"
[434] "Eteone picta"
[435] "Nephtys incisa"
[436] "Scyphozoa"
[437] "Mangelia costulata"
[438] "Nudibranchia"
[439] "Trophoniella enigmatica"
[440] "Lutraria oblonga"
[441] "Thyone fusus"
[442] "Alitta succinea"
[443] "Diopatra biscayensis"
[444] "Botrylloides"
[445] "Hediste diversicolor"
[446] "Leptosynapta"
[447] "Donax trunculus"
[448] "Sagartia"
[449] "Cnidaria"
[450] "Salpida"
[451] "Chartella papyracea"
[452] "Haliclona (Haliclona)"
[453] "Scorpaena porcus"
[454] "Scyllarus arctus"
[455] "Diadumene lineata"
[456] "Botrylloides leachii"
[457] "Synaptidae"
[458] "Sabellaria spinulosa"
[459] "Anilocra"
[460] "Cylista elegans"
[461] "Doris pseudoargus"
[462] "Lamellaria perspicua"
[463] "Alpheus glaber"
[464] "Dromia personata"
[465] "Ocnus planci"
[466] "Anguinella palmata"
[467] "Hydrallmania falcata"
[468] "Anguinella"
[469] "Cliona"
[470] "Didemnidae"
[471] "Dysidea fragilis"
[472] "Trivia arctica"
[473] "Actinothoe sphyrodeta"
[474] "Rhodophyta"
[475] "Limaria hians"
[476] "Parablennius gattorugine"
[477] "Funiculina quadrangularis"
[478] "Neoamphitrite affinis"
[479] "Sthenelais limicola"
[480] "Thyone inermis"
[481] "Gammarus insensibilis"
[482] "Ascidia conchilega"
[483] "Nemertesia ramosa"
[484] "Capnea sanguinea"
[485] "Hormathia coronata"
[486] "Suberites ficus"
[487] "Gaidropsarus mediterraneus"
[488] "Idotea emarginata"
[489] "Palaemon macrodactylus"
[490] "Idotea linearis"
[491] "Dosinia exoleta"
[492] "Pirimela denticulata"
[493] "Cylista troglodytes"
[494] "Austrominius modestus"
[495] "Cylista"
[496] "Terebratulidae"
[497] "Orbinia sertulata"
[498] "Lumbrineridae"
[499] "Liocarcinus zariquieyi"
[500] "Cerastoderma glaucum"
[501] "Spirobranchus lamarcki"
[502] "Pleurobranchus membranaceus"
[503] "Scolanthus callimorphus"
[504] "Inachus leptochirus"
[505] "Sepia"
[506] "Pawsonia saxicola"
[507] "Trachurus mediterraneus"
[508] "Boops boops"
[509] "Sertularia cupressina"
[510] "Vesicularia spinosa"
[511] "Hemigrapsus sanguineus"
[512] "Pleurobrachia pileus"
[513] "Scrupocellaria scruposa"
[514] "Tritia neritea"
[515] "Sthenelais boa"
[516] "Gaidropsarus"
[517] "Aequorea"
[518] "Abyssoninoe hibernica"
[519] "Lepidonotus squamatus"
[520] "Armina maculata"
[521] "Antalis entalis"
[522] "Amphisbetia operculata"
[523] "Ascidiidae"
[524] "Echinodermata"
[525] "Haminoea"
[526] "Lepidorhombus whiffiagonis"
[527] "Hippolyte varians"
[528] "Brachyura"
[529] "Plantae"
[530] "Pinnotheres pisum"
[531] "Atherina boyeri"
[532] "Neoamphitrite"
[533] "Heterobranchia"
[534] "Neoamphitrite edwardsi"
[535] "Diodora graeca"
[536] "Leucothoe"
[537] "Philocheras sculptus"
[538] "Epizoanthus"
[539] "Pyura"
[540] "Actiniidae"
[541] "Eualus cranchii"
[542] "Sabellaria alveolata"
[543] "Eunice woodwardi"
[544] "Clibanarius erythropus"
[545] "Gammarus locusta"
[546] "Gammarus oceanicus"
[547] "Engraulis maeoticus"
[548] "Mullus barbatus"
[549] "Fimbriosthenelais"
[550] "Octopus vulgaris"
[551] "Idoteidae"
[552] "Synidotea laticauda"
[553] "Scrobicularia plana"
[554] "Mullus"
[555] "Nereis lamellosa"
[556] "Pectinariidae"
[557] "Anthozoa"
[558] "Haliclona"
[559] "Gammarus crinicornis"
[560] "Rhombosepion orbignyanum"
[561] "Mysida"
[562] "Balanus crenatus"
[563] "Xanthidae"
[564] "Glycera tridactyla"
[565] "Parvicardium scabrum"
[566] "Marphysa sanguinea"
[567] "Nereis pelagica"
[568] "Pachygrapsus marmoratus"
[569] "Harmothoe"
[570] "Haminoea navicula"
[571] "Mytilus galloprovincialis"
[572] "Spirobranchus triqueter"
[573] "Pyuridae"
[574] "Gibbula umbilicalis"
[575] "Hippolyte leptocerus"
[576] "Amphiuridae"
[577] "Alentia gelatinosa"
[578] "Marphysa"
[579] "Ascidia virginea"
[580] "Felimare cantabrica"
[581] "Hypereteone foliosa"
[582] "Harmothoe antilopes"
[583] "Musculus discors"
[584] "Neanthes"
[585] "Leptochiton"
[586] "Lysidice ninetta"
[587] "Lysidice unicornis"
[588] "Lepidonotus"
[589] "Nicolea venustula"
[590] "Pomatoschistus"
[591] "Alcyonacea"
[592] "Blennius"
[593] "Ruditapes philippinarum"
[594] "Tritia nitida"
[595] "Heteronemertea"
[596] "Membranipora membranacea"
[597] "Phyllodoce"
[598] "Euspira"
[599] "Abludomelita obtusata"
[600] "Aoridae"
[601] "Aeolidiidae"
[602] "Ampharete"
[603] "Maldaninae"
[604] "Mya arenaria"
[605] "Clionaidae"
[606] "Semibalanus balanoides"
[607] "Anemonia sulcata"
[608] "Spongiidae"
[609] "Spongia"
[610] "Xantho"
[611] "Nereis"
[612] "Hyalinoecia tubicola"
[613] "Tritonia"
[614] "Corophium"
[615] "Anemonia viridis"
[616] "Salaria pavo"
[617] "Xantho hydrophilus"
[618] "Idotea metallica"
[619] "Lithognathus mormyrus"
[620] "Trophonopsis muricata"
[621] "Paraleptopentacta elongata"
[622] "Gobius paganellus"
[623] "Eurydice pulchra"
[624] "Glycera fallax"
[625] "Venus casina"
5. AquaticWeb
Let’s load the combined dataset.
tidy_data <- load_raw_sea_data(here("data", "coast")) |>
clean_sea_data() |>
combine_sea_data()
species_names <- tidy_data$catch |>
pull(species) |>
unique()
species <- data.frame(name = species_names)
species$name_validated <- validate_names(species$name)
head(species) name name_validated
1 Abramis <NA>
2 Abramis brama Abramis brama
3 Abramis brama + Blicca bjoerkna <NA>
4 Acipenser sturio Acipenser sturio
5 Agonus cataphractus Agonus cataphractus
6 Alburnoides bipunctatus Alburnoides bipunctatus
aquatic_web <- read.csv(here("data", "aquatic-web-extraction-eric.csv"))
head(aquatic_web) predateur proie mange selectivity nom origine stade_pred
1 Salvelinus alpinus Daphnia -1 3
2 Polyarthra Cryptophyceae -1 3
3 Polyarthra Chrysophyceae -1 3
4 Cyclopoida Chironomidae -1 -1
5 Cyclopoida Cladocera -1 -1
6 Cyclopoida Rotifera -1 -1
stade_proie titre
1 Zooplankton and its relation to available food in Lake Myvatn
2 Zooplankton and its relation to available food in Lake Myvatn
3 Zooplankton and its relation to available food in Lake Myvatn
4 Larve Zooplankton and its relation to available food in Lake Myvatn
5 Zooplankton and its relation to available food in Lake Myvatn
6 Zooplankton and its relation to available food in Lake Myvatn
num_vol numero_article DOI annee nom.1 journal
1 32 1979 Oikos Adelsteinsson H.
2 32 1979 Oikos Adelsteinsson H.
3 32 1979 Oikos Adelsteinsson H.
4 32 1979 Oikos Adelsteinsson H.
5 32 1979 Oikos Adelsteinsson H.
6 32 1979 Oikos Adelsteinsson H.
names_aquatic_web <- aquatic_web |>
pull(predateur) |>
unique() |>
validate_names() |>
na.omit()
species <- species |>
mutate(in_aquatic_web = name_validated %in% names_aquatic_web)
species |> summarise(
unique_entry = n(),
valid_entry = sum(!is.na(name_validated)),
aquatic_web_entry = sum(in_aquatic_web)
) unique_entry valid_entry aquatic_web_entry
1 790 184 62
TODO
- Do the diet table for fish already documented and compare diet.