{hyenaR}
:date <- "2000-01-01"
create_id_starting.table(clan = find_clan_name.all(main.clans = TRUE), at = date, lifestage = "adult") %>%
mutate(age = fetch_id_age(ID = ID, at = date), clan = fetch_id_clan.current(ID = ID, at = date)) %>%
group_by(clan) %>%
filter(age == max(age))
# A tibble: 8 × 3
# Groups: clan [8]
ID age clan
<chr> <dbl> <chr>
1 A-001 11.6 A
2 E-004 13.8 E
3 F-001 11.5 F
4 L-005 13.7 L
5 M-012 16.6 M
6 N-003 12.5 N
7 S-040 9.72 S
8 T-002 10.9 T
date <- "2000-01-01"
create_id_starting.table(clan = find_clan_name.all(main.clans = TRUE), at = date, lifestage = "adult") %>%
mutate(age = fetch_id_age(ID = ID, at = date), clan = fetch_id_clan.current(ID = ID, at = date)) %>%
group_by(clan) %>%
filter(age == max(age)) %>%
ungroup()
# A tibble: 8 × 3
ID age clan
<chr> <dbl> <chr>
1 A-001 11.6 A
2 E-004 13.8 E
3 F-001 11.5 F
4 L-005 13.7 L
5 M-012 16.6 M
6 N-003 12.5 N
7 S-040 9.72 S
8 T-002 10.9 T
date <- "2000-01-01"
create_id_starting.table(clan = find_clan_name.all(main.clans = TRUE), at = date, lifestage = "adult") %>%
mutate(age = fetch_id_age(ID = ID, at = date), clan = fetch_id_clan.current(ID = ID, at = date)) %>%
group_by(clan) %>%
filter(age == max(age)) %>%
summarise(sd_maxage = sd(age))
# A tibble: 8 × 2
clan sd_maxage
<chr> <dbl>
1 A NA
2 E NA
3 F NA
4 L NA
5 M NA
6 N NA
7 S NA
8 T NA
date <- "2000-01-01"
create_id_starting.table(clan = find_clan_name.all(main.clans = TRUE), at = date, lifestage = "adult") %>%
mutate(age = fetch_id_age(ID = ID, at = date), clan = fetch_id_clan.current(ID = ID, at = date)) %>%
group_by(clan) %>%
filter(age == max(age)) %>%
ungroup() %>%
summarise(sd_maxage = sd(age))
# A tibble: 1 × 1
sd_maxage
<dbl>
1 2.14
{ggplot2}
and {tidyverse}
functions# A tibble: 1 × 10
date to A E F L M N S T
<date> <date> <int> <int> <int> <int> <int> <int> <int> <int>
1 1997-07-01 1997-12-31 49 18 14 48 52 20 4 12
{ggplot2}
and {tidyverse}
functions# A tibble: 8 × 4
clan date to clan_size
<chr> <date> <date> <int>
1 A 1997-07-01 1997-12-31 49
2 E 1997-07-01 1997-12-31 18
3 F 1997-07-01 1997-12-31 14
4 L 1997-07-01 1997-12-31 48
5 M 1997-07-01 1997-12-31 52
6 N 1997-07-01 1997-12-31 20
7 S 1997-07-01 1997-12-31 4
8 T 1997-07-01 1997-12-31 12
# A tibble: 1 × 10
date to A E F L M N S T
<date> <date> <int> <int> <int> <int> <int> <int> <int> <int>
1 1997-07-01 1997-12-31 49 18 14 48 52 20 4 12
# Start with data in wide format
wide_format %>%
tidyr::pivot_longer(cols = A:T,
names_to = "clan",
values_to = "clan_size")
# A tibble: 8 × 4
date to clan clan_size
<date> <date> <chr> <int>
1 1997-07-01 1997-12-31 A 49
2 1997-07-01 1997-12-31 E 18
3 1997-07-01 1997-12-31 F 14
4 1997-07-01 1997-12-31 L 48
5 1997-07-01 1997-12-31 M 52
6 1997-07-01 1997-12-31 N 20
7 1997-07-01 1997-12-31 S 4
8 1997-07-01 1997-12-31 T 12
# A tibble: 8 × 4
clan date to clan_size
<chr> <date> <date> <int>
1 A 1997-07-01 1997-12-31 49
2 E 1997-07-01 1997-12-31 18
3 F 1997-07-01 1997-12-31 14
4 L 1997-07-01 1997-12-31 48
5 M 1997-07-01 1997-12-31 52
6 N 1997-07-01 1997-12-31 20
7 S 1997-07-01 1997-12-31 4
8 T 1997-07-01 1997-12-31 12
# A tibble: 8 × 4
clan date to clan_size
<chr> <date> <date> <int>
1 A 1997-07-01 1997-12-31 49
2 E 1997-07-01 1997-12-31 18
3 F 1997-07-01 1997-12-31 14
4 L 1997-07-01 1997-12-31 48
5 M 1997-07-01 1997-12-31 52
6 N 1997-07-01 1997-12-31 20
7 S 1997-07-01 1997-12-31 4
8 T 1997-07-01 1997-12-31 12
# A tibble: 853 × 2
ID age
<chr> <dbl>
1 A-080 9.26
2 A-081 13.1
3 A-087 11.3
4 A-089 3.73
5 A-092 11.2
6 A-093 16.2
7 A-100 6.26
8 A-101 5.60
9 A-102 14.6
10 A-103 5.40
# … with 843 more rows
# ℹ Use `print(n = ...)` to see more rows
create_id_starting.table() %>%
#Extract birth date and birth clan
mutate(birth.date = fetch_id_date.birth(ID = ID),
birth.clan = fetch_id_clan.birth(ID = ID),
date.dead = fetch_id_date.death(ID=ID),
age.dead = fetch_id_age(ID = ID, at = date.dead),
sex = fetch_id_sex(ID = ID)) %>%
filter(
#Filter left censored
birth.date > find_pop_date.observation.first(),
#Filter individuals born in main clans
birth.clan %in% find_clan_name.all(main.clans = TRUE),
#filter individuals who lived to age 2+
age.dead >= 2) %>%
#filter right censored
filter(!fetch_id_is.censored.right(ID = ID)) %>%
ungroup() %>%
select(ID, age.dead)
# A tibble: 855 × 2
ID age.dead
<chr> <dbl>
1 A-080 9.26
2 A-081 13.1
3 A-087 11.3
4 A-089 3.73
5 A-092 11.2
6 A-093 16.2
7 A-100 6.26
8 A-101 5.60
9 A-102 14.6
10 A-103 5.40
# … with 845 more rows
# ℹ Use `print(n = ...)` to see more rows
#If we just specify clan it is the same as giving clan.overlap = "birth" (desirable?)
(create_id_starting.table(clan = find_clan_name.all(main.clans = TRUE)) %>%
mutate(sex = fetch_id_sex(ID = ID),
## NOTE: Last observation and death are not the same! (more on this later)
age = fetch_id_age(ID = ID, at = fetch_id_date.observation.last(ID = ID))) %>%
#Filter for uncensored and mature individuals
filter(!fetch_id_is.censored(ID = ID),
age >= 2) -> my_data)
# A tibble: 853 × 3
ID sex age
<chr> <chr> <dbl>
1 A-080 female 9.26
2 A-081 female 13.1
3 A-087 male 11.3
4 A-089 male 3.73
5 A-092 male 11.2
6 A-093 male 16.2
7 A-100 male 6.26
8 A-101 female 5.60
9 A-102 female 14.6
10 A-103 male 5.40
# … with 843 more rows
# ℹ Use `print(n = ...)` to see more rows
# Same starting code
(create_id_starting.table(clan = find_clan_name.all(main.clans = TRUE)) %>%
mutate(sex = fetch_id_sex(ID = ID),
age = fetch_id_age(ID = ID, at = fetch_id_date.observation.last(ID = ID))) %>%
filter(!fetch_id_is.censored(ID = ID),
#Alternative which applies age > 2 (should make consistent)
fetch_id_is.adult(ID = ID, at = fetch_id_date.observation.last(ID = ID))) -> my_data2)
# A tibble: 853 × 3
ID sex age
<chr> <chr> <dbl>
1 A-080 female 9.26
2 A-081 female 13.1
3 A-087 male 11.3
4 A-089 male 3.73
5 A-092 male 11.2
6 A-093 male 16.2
7 A-100 male 6.26
8 A-101 female 5.60
9 A-102 female 14.6
10 A-103 male 5.40
# … with 843 more rows
# ℹ Use `print(n = ...)` to see more rows
# Same starting code
(create_id_starting.table(clan = find_clan_name.all(main.clans = TRUE)) %>%
mutate(sex = fetch_id_sex(ID = ID),
age = fetch_id_age(ID = ID, at = fetch_id_date.observation.last(ID = ID))) %>%
filter(!fetch_id_is.censored(ID = ID),
# Death and last sighting are not the same
fetch_id_is.adult(ID = ID, at = fetch_id_date.death(ID = ID))) -> my_data3)
# A tibble: 855 × 3
ID sex age
<chr> <chr> <dbl>
1 A-080 female 9.26
2 A-081 female 13.1
3 A-087 male 11.3
4 A-089 male 3.73
5 A-092 male 11.2
6 A-093 male 16.2
7 A-100 male 6.26
8 A-101 female 5.60
9 A-102 female 14.6
10 A-103 male 5.40
# … with 845 more rows
# ℹ Use `print(n = ...)` to see more rows
# lifestage = "adult" returns individuals that were adults at some point in main clans
# Therefore, they are not necessarily BORN in the main clans
(create_id_starting.table(clan = find_clan_name.all(main.clans = TRUE),
lifestage = "adult") %>%
mutate(sex = fetch_id_sex(ID = ID),
age = fetch_id_age(ID = ID, at = fetch_id_date.observation.last(ID = ID))) %>%
filter(!fetch_id_is.censored(ID = ID)) -> my_data4)
# A tibble: 880 × 3
ID sex age
<chr> <chr> <dbl>
1 A-080 female 9.26
2 A-081 female 13.1
3 A-087 male 11.3
4 A-089 male 3.73
5 A-092 male 11.2
6 A-093 male 16.2
7 A-100 male 6.26
8 A-101 female 5.60
9 A-102 female 14.6
10 A-103 male 5.40
# … with 870 more rows
# ℹ Use `print(n = ...)` to see more rows
# Do it 'manually'
(create_id_starting.table() %>%
#Extract birth date and birth clan
mutate(birth.date = fetch_id_date.birth(ID = ID),
birth.clan = fetch_id_clan.birth(ID = ID),
date.dead = fetch_id_date.death(ID=ID),
age.dead = fetch_id_age(ID = ID, at = date.dead),
sex = fetch_id_sex(ID = ID)) %>%
filter(
#Filter left censored
birth.date > find_pop_date.observation.first(),
#Filter individuals born in main clans
birth.clan %in% find_clan_name.all(main.clans = TRUE),
#filter individuals who lived to age 2+
age.dead >= 2) %>%
#filter right censored
filter(!fetch_id_is.censored.right(ID = ID)) %>%
ungroup() -> mytibble)
# A tibble: 855 × 6
ID birth.date birth.clan date.dead age.dead sex
<chr> <date> <chr> <date> <dbl> <chr>
1 A-080 1996-06-11 A 2005-09-16 9.26 female
2 A-081 1996-06-21 A 2009-08-11 13.1 female
3 A-087 1996-10-28 A 2008-02-23 11.3 male
4 A-089 1996-12-12 A 2000-09-04 3.73 male
5 A-092 1996-10-29 A 2008-01-14 11.2 male
6 A-093 1996-12-26 A 2013-02-20 16.2 male
7 A-100 1997-08-15 A 2003-11-18 6.26 male
8 A-101 1998-01-18 A 2003-08-27 5.60 female
9 A-102 1998-06-15 A 2013-01-25 14.6 female
10 A-103 1998-06-15 A 2003-11-08 5.40 male
# … with 845 more rows
# ℹ Use `print(n = ...)` to see more rows
(create_id_starting.table(clan = find_clan_name.all(main.clans = TRUE)) %>%
filter(!fetch_id_is.censored(ID = ID)) %>%
mutate(lifespan = fetch_id_duration.lifespan(ID = ID, unit = "year"),
sex = fetch_id_sex(ID = ID)) %>%
filter(lifespan >= 2) -> liam_df)
# A tibble: 855 × 3
ID lifespan sex
<chr> <dbl> <chr>
1 A-080 9.26 female
2 A-081 13.1 female
3 A-087 11.3 male
4 A-089 3.73 male
5 A-092 11.2 male
6 A-093 16.2 male
7 A-100 6.26 male
8 A-101 5.60 female
9 A-102 14.6 female
10 A-103 5.40 male
# … with 845 more rows
# ℹ Use `print(n = ...)` to see more rows
# Use separate clan.overlap and lifestage args
(create_id_starting.table(clan = find_clan_name.all(main.clans = TRUE),
clan.overlap = "birth",
lifestage = "adult") %>%
filter(!fetch_id_is.censored(ID = ID)) %>%
mutate(lifespan = fetch_id_duration.lifespan(ID = ID, unit = "year"),
sex = fetch_id_sex(ID = ID)) -> liam_df2)
# A tibble: 853 × 3
ID lifespan sex
<chr> <dbl> <chr>
1 A-080 9.26 female
2 A-081 13.1 female
3 A-087 11.3 male
4 A-089 3.73 male
5 A-092 11.2 male
6 A-093 16.2 male
7 A-100 6.26 male
8 A-101 5.60 female
9 A-102 14.6 female
10 A-103 5.40 male
# … with 843 more rows
# ℹ Use `print(n = ...)` to see more rows
fetch_id_date.observation.last()
gives the date at which individual was last known to be alive (but see issue #545)fetch_id_date.death()
gives the date after an individual’s last sighting (or date when death was confirmed)fetch_id_duration.lifespan()
uses an individual’s death date.[1] TRUE
[1] FALSE
create_id_starting.table()
slower?create_id_starting.table()
slower?