R-根据ID统计每天遇到的新个人数量
我正在监测一个动物种群。我有他们的个人ID作为数字,他们在那天遇到的日期,以及那天遇到的个人数量。我想随着时间的推移总结遇到的不同个体的总数,因此我需要它来识别相同的ID,并且只向遇到的总数中添加新的个体 这是我的数据集,最后一列是我想要的结果:R-根据ID统计每天遇到的新个人数量,r,data-manipulation,R,Data Manipulation,我正在监测一个动物种群。我有他们的个人ID作为数字,他们在那天遇到的日期,以及那天遇到的个人数量。我想随着时间的推移总结遇到的不同个体的总数,因此我需要它来识别相同的ID,并且只向遇到的总数中添加新的个体 这是我的数据集,最后一列是我想要的结果: Month Day ID N. individuals that day Total encountered 5 13 44 3 3 5 13 58
Month Day ID N. individuals that day Total encountered
5 13 44 3 3
5 13 58 3 3
5 13 57 3 3
5 14 58 1 3
5 15 44 2 4
5 15 06 2 4
编辑-更新为工作但不雅观的解决方案。这里的过程是使用
padr
为每个日期中的每个ID创建一行,一旦出现1
。然后,我们可以计算到每个日期出现了多少ID,并使用联接将其添加到原始ID中
library(tidyverse); library(lubridate)
# First, make a date column for easier sorting etc.
df1 <- df %>%
mutate(date = ymd(paste(2019, Month, Day))) %>%
select(date, ID) %>%
mutate(appearance = 1) # For counting later; if missing = NA in padded version
df2 <- df1 %>%
padr::pad(group = "ID", start_val = min(df1$date), end_val = max(df1$dat)) %>%
fill(appearance) %>%
count(date, Month = month(date), Day = day(date),
wt = appearance, name = "Total_encountered_calc")
df %>%
left_join(df2)
编辑-更新为工作但不雅观的解决方案。这里的过程是使用
padr
为每个日期中的每个ID创建一行,一旦出现1
。然后,我们可以计算到每个日期出现了多少ID,并使用联接将其添加到原始ID中
library(tidyverse); library(lubridate)
# First, make a date column for easier sorting etc.
df1 <- df %>%
mutate(date = ymd(paste(2019, Month, Day))) %>%
select(date, ID) %>%
mutate(appearance = 1) # For counting later; if missing = NA in padded version
df2 <- df1 %>%
padr::pad(group = "ID", start_val = min(df1$date), end_val = max(df1$dat)) %>%
fill(appearance) %>%
count(date, Month = month(date), Day = day(date),
wt = appearance, name = "Total_encountered_calc")
df %>%
left_join(df2)
选择权
library(tidyverse)
df %>%
add_count(Month, Day) %>%
mutate(n1 = duplicated(ID)) %>%
group_by(Month, Day) %>%
mutate(n1 = c(min(n - n1), rep(0, n()-1))) %>%
ungroup %>%
mutate(n1 = cumsum(n1))
# A tibble: 6 x 5
# Month Day ID n n1
# <int> <int> <int> <int> <dbl>
#1 5 13 44 3 3
#2 5 13 58 3 3
#3 5 13 57 3 3
#4 5 14 58 1 3
#5 5 15 44 2 4
#6 5 15 6 2 4
库(tidyverse)
df%>%
添加计数(月、日)%>%
突变(n1=重复(ID))%>%
分组依据(月、日)%>%
突变(n1=c(最小值(n-n1),代表(0,n()-1))%>%
解组%>%
突变(n1=cumsum(n1))
#一个tibble:6x5
#月日ID n n1
#
#1 5 13 44 3 3
#2 5 13 58 3 3
#3 5 13 57 3 3
#4 5 14 58 1 3
#5 5 15 44 2 4
#6 5 15 6 2 4
一个选项
library(tidyverse)
df %>%
add_count(Month, Day) %>%
mutate(n1 = duplicated(ID)) %>%
group_by(Month, Day) %>%
mutate(n1 = c(min(n - n1), rep(0, n()-1))) %>%
ungroup %>%
mutate(n1 = cumsum(n1))
# A tibble: 6 x 5
# Month Day ID n n1
# <int> <int> <int> <int> <dbl>
#1 5 13 44 3 3
#2 5 13 58 3 3
#3 5 13 57 3 3
#4 5 14 58 1 3
#5 5 15 44 2 4
#6 5 15 6 2 4
库(tidyverse)
df%>%
添加计数(月、日)%>%
突变(n1=重复(ID))%>%
分组依据(月、日)%>%
突变(n1=c(最小值(n-n1),代表(0,n()-1))%>%
解组%>%
突变(n1=cumsum(n1))
#一个tibble:6x5
#月日ID n n1
#
#1 5 13 44 3 3
#2 5 13 58 3 3
#3 5 13 57 3 3
#4 5 14 58 1 3
#5 5 15 44 2 4
#6 5 15 6 2 4
逻辑不清楚。为什么数字在44再次出现时发生了变化,而在58年没有发生变化?我认为这样做的目的是查看每天的情况,并计算当天看到的唯一ID的累计数量。@akrun它在44再次出现时发生了变化,因为06在那天也是第一次遇到。请注意,由于当天遇到了2个人,N。当天遇到的个人数为2人,但遇到的总人数仅增加1人。逻辑不清楚。为什么数字在44再次出现时发生了变化,而在58年没有发生变化?我认为这样做的目的是查看每天的情况,并计算当天看到的唯一ID的累计数量。@akrun它在44再次出现时发生了变化,因为06在那天也是第一次遇到。请注意,由于在该日期遇到了2个个体,N。当天的个体数为2,但遇到的总数仅增加1