首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按组滚动计数事件随时间变化的R值

按组滚动计数事件随时间变化的R值
EN

Stack Overflow用户
提问于 2020-05-04 18:29:46
回答 1查看 201关注 0票数 1

我正在研究一种鸟类的生产力数据。我想把配对经验,定义为迄今为止放置的离合器的总数,作为一个变量来调查它是否对生产力有影响。

要做到这一点,我需要计算在当前离合器前每对离合器的总数量。

下面是我正在处理的数据:

代码语言:javascript
复制
   Pair.ID    laydate
1  GGM 022       <NA>
2  GGM 022       <NA>
3  GGM 022       <NA>
4  GGM 019 26/03/2017
5  GGM 019       <NA>
6  GGM 019       <NA>
7  GGM 013 18/03/2017
8  GGM 021       <NA>
9  GGM 021       <NA>
10 GGM 021       <NA>
11 GGM 009 25/12/2016
12 GGM 009 14/01/2019
13 GGM 009 20/01/2019
14 GGM 029       <NA>
15 GGM 031 09/05/2019
16 GGM 031 19/06/2019

以下是我要讲的内容:

代码语言:javascript
复制
   Pair.ID    laydate experience
1  GGM 022       <NA>         NA
2  GGM 022       <NA>         NA
3  GGM 022       <NA>         NA
4  GGM 019 26/03/2017          0
5  GGM 019       <NA>         NA
6  GGM 019       <NA>         NA
7  GGM 013 18/03/2017          0
8  GGM 021       <NA>         NA
9  GGM 021       <NA>         NA
10 GGM 021       <NA>         NA
11 GGM 009 25/12/2016          0
12 GGM 009 14/01/2019          1
13 GGM 009 20/01/2019          2
14 GGM 029       <NA>         NA
15 GGM 031 09/05/2019          0
16 GGM 031 19/06/2019          1

有几件事:( 1)我需要保持与NA成对的行,因为它们是一对有繁殖能力但没有繁殖的地方。2)我希望将信息添加到母数据中,而不是创建摘要数据。3)如果可能的话,我想使用dplyr

我环顾四周,试图为符合我的目的而争论这些解决方案,但无法让它们按需要工作:Rolling Count of Events Over Time SeriesCount events before a specific time for a series of items in R

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-04 18:31:02

我们可以按Pair.ID进行分组,在i中指定逻辑向量,即在“laydate”中任何地方都有非NA元素,并通过对行序列进行排序(:=)来创建新列“体验”。

代码语言:javascript
复制
library(data.table)
setDT(df1)[!is.na(laydate), experience := seq_len(.N) - 1, Pair.ID][]
#    Pair.ID    laydate experience
# 1: GGM 022       <NA>         NA
# 2: GGM 022       <NA>         NA
# 3: GGM 022       <NA>         NA
# 4: GGM 019 26/03/2017          0
# 5: GGM 019       <NA>         NA
# 6: GGM 019       <NA>         NA
# 7: GGM 013 18/03/2017          0
# 8: GGM 021       <NA>         NA
# 9: GGM 021       <NA>         NA
#10: GGM 021       <NA>         NA
#11: GGM 009 25/12/2016          0
#12: GGM 009 14/01/2019          1
#13: GGM 009 20/01/2019          2
#14: GGM 029       <NA>         NA
#15: GGM 031 09/05/2019          0
#16: GGM 031 19/06/2019          1

或使用dplyr

代码语言:javascript
复制
library(dplyr)
df1 %>%
  group_by(Pair.ID) %>%
  mutate(experience = (row_number()-1) * (NA^(is.na(laydate))))

数据

代码语言:javascript
复制
df1 <- structure(list(Pair.ID = c("GGM 022", "GGM 022", "GGM 022", "GGM 019", 
"GGM 019", "GGM 019", "GGM 013", "GGM 021", "GGM 021", "GGM 021", 
"GGM 009", "GGM 009", "GGM 009", "GGM 029", "GGM 031", "GGM 031"
), laydate = c(NA, NA, NA, "26/03/2017", NA, NA, "18/03/2017", 
NA, NA, NA, "25/12/2016", "14/01/2019", "20/01/2019", NA, "09/05/2019", 
"19/06/2019")), class = "data.frame", row.names = c("1", "2", 
"3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", 
"15", "16"))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61599145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档