Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R-根据ID统计每天遇到的新个人数量_R_Data Manipulation - Fatal编程技术网

R-根据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

我正在监测一个动物种群。我有他们的个人ID作为数字,他们在那天遇到的日期,以及那天遇到的个人数量。我想随着时间的推移总结遇到的不同个体的总数,因此我需要它来识别相同的ID,并且只向遇到的总数中添加新的个体

这是我的数据集,最后一列是我想要的结果:

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