-
Notifications
You must be signed in to change notification settings - Fork 0
/
LongevityTables_Test.R
65 lines (49 loc) · 2.89 KB
/
LongevityTables_Test.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# code from Demo Derby.R
# testing if it works with the ELC API instead of the pbdb packagelibrary(RColorBrewer) #to make pretty colors
library(ggplot2) #for plottinglibrary(RColorBrewer) #to make pretty colors
library(dplyr) #for plotting
# decide what genus/family to get info about
input<-"felidae"
# download the data using the ELC API
occurrences<-read.csv(paste("http://earthlifeconsortium.org/api_v1/occ?taxon=",input,"&ageunits=Ka&output=csv",sep=""))
# not necessary when we have only one taxa that we're showing
x <- list(occurrences) # each taxonomic group into a list
#### function to GENERATE LONGEVITY TABLES ####
GenerateLongevities <- function(x){ #where x is a matrix of pbdb occurrence data fetched via pbdb_occurrences
x <- as.data.frame(x) # turn x into a data frame (holdover from version where multiple families are included)
x<-x[!is.na(x$min_age),] # remove rows that have a NA for either min age or max age
x<-x[!is.na(x$max_age),] # remove rows that have a NA for either min age or max age
taxon_split<-strsplit(as.character(x$taxon)," ") # split the taxon name on spaces
genera<-NA
for(row in 1:length(taxon_split)) {
genera[row]<-taxon_split[[row]][1]
}
x$genera<-genera # add the genus column to the data frame
genus.names<-unique(genera) #What are the unique genus names?
num.genera<-length(genus.names) #How many genera are there? (will be number of rows in the results matrix)
outTable<-data.frame(matrix(NA,nrow=num.genera,ncol=4))
colnames(outTable)<-c("Taxa","FAD","LAD","Duration")
outTable$Taxa<-genus.names
for(species in 1:nrow(outTable)){
this.taxon <- outTable[species,1] #Define the taxa
all.occ.this.taxon <- dplyr::filter(x, x$genera == this.taxon) #Select all rows of that taxon
FAD <- max(all.occ.this.taxon$max_age, na.rm = T) #Find the max value (FAD) of that taxon...
outTable[species,2] <- FAD #...and insert it into column 2 (FAD)
LAD <- min(all.occ.this.taxon$min_age, na.rm = T) #Find the min value (LAD) of that taxon...
outTable[species,3] <- LAD #...and insert it into column 3
longevity <- FAD - LAD #Calulate the species longevity...
outTable[species,4] <- longevity #...and insert it into column 4
outTable<-outTable
}
df <- as.data.frame(outTable) #Save Result to list
# Plot the longevities
g <- ggplot(df, aes(x = Longevity, y = Taxa)) +
geom_segment(aes(x = as.numeric(as.character(LAD)), y = Taxa, xend = as.numeric(as.character(FAD)), yend = Taxa)) +
geom_text(aes(x = as.numeric(as.character(FAD)), y = Taxa, label = Taxa), nudge_x = 1, nudge_y = 1) +
theme(axis.text.y=element_blank(),
axis.ticks.y=element_blank()) +
ggtitle("Longevities")
g
} #end function
Longevities <- lapply(x, GenerateLongevities)
Longevities