首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据组中特定列的结果的日期范围筛选行

如何根据组中特定列的结果的日期范围筛选行
EN

Stack Overflow用户
提问于 2021-03-06 12:03:05
回答 1查看 49关注 0票数 0

问题

我有四列(ID)的数据,测试完成日期(TestDT) --一列具有兴趣测试(Test1)的数值结果,另一列有不同兴趣测试(Test2)的数值结果。

代码语言:javascript
复制
ID  TestDT      Test1   Test2
1   2011-03-02  23       NA
2   2011-03-14  NA       16
2   2011-03-15  NA       52
2   2011-11-22  24       NA
2   2011-12-12  NA       77
3   2009-03-02  NA       23
3   2009-05-02  15       NA
3   2011-15-02  NA       66
4   2017-07-03  NA       22

期望结果

我想得到任何Test2的平均结果,这发生在3个月的时间内(即之前或之后)测试1的每个ID。

代码语言:javascript
复制
ID  TestDT      Test1   Test2 Av_of_test2_within_range
1   2011-03-02  23       NA    34
2   2011-11-22  24       NA    77
3   2009-05-02  15       NA    23

我很难过滤在时间范围内发生的Test2结果。

尝试

我尝试从filter_time包中使用tibbletime,如下所示:

代码语言:javascript
复制
library(tibbletime)
FB <- as_tbl_time(myData, index = TestDT)
FB %>% group_by(ID) %>%filter_time(TestDT ~ TestDT+84)

但是得到错误:

代码语言:javascript
复制
Error: Problem with `filter()` input `..1`.
x object 'TestDT' not found
i Input `..1` is `{ ... }`.
The error occured in group 1: 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-06 13:34:12

data.table具有foverlaps函数,它在日期范围内合并两个数据集。

您需要将数据拆分为test1和test2,并执行如下操作:

代码语言:javascript
复制
library(data.table)

df <- read.table(text = "ID  TestDT      Test1   Test2
1   2011-03-02  23       NA
2   2011-03-14  NA       16
2   2011-03-15  NA       52
2   2011-11-22  24       NA
2   2011-12-12  NA       77
3   2009-03-02  NA       23
3   2009-05-02  15       NA
3   2011-12-02  NA       66
4   2017-07-03  NA       22", header = TRUE)

dt <- data.table(df)
dt[, TestDT := as.Date(TestDT)]
test1 <- dt[!is.na(Test1), .(ID, TestDT, Test1)]
test2 <- dt[!is.na(Test2), .(ID, TestDT, Test2)]
test1[, start.date := TestDT - 91]
test1[, end.date := TestDT + 91]
test2[, start.date := TestDT]
test2[, end.date := TestDT]
setkey(test2, ID, start.date, end.date)

res <- foverlaps(
  test1, 
  test2, 
  by.x = c("ID", "start.date", "end.date"),
  by.y = c("ID", "start.date", "end.date")
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66505421

复制
相关文章

相似问题

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