【发布时间】:2021-10-31 06:09:18
【问题描述】:
在 R 中,如何计算在时间范围内满足条件的观察次数?
具体来说,我想通过 country 在过去 8 个月内计算不同 id 的数量,但前提是 id 在这 8 个月内至少出现两次。因此,对于计数,id 出现 2 倍还是 100 倍都没有关系(分两步执行此操作可能更容易)。 NA 存在于 id 和 country 中。由于这可以通过其他方式解决,因此无需考虑这一点,但仍然有帮助。
我目前最好的尝试是,但没有考虑到限制(ID 在过去 8 个月中必须至少出现两次),而且我在查看 dates="2017-12-12" 时发现它的计数很奇怪,其中 desired_unrestricted 应该是根据我的计数等于 4 但代码给出了 2。
dt[, date := as.Date(date)][
, totalids := sapply(date,
function(x) length(unique(id[between(date, x - lubridate::month(8), x)]))),
by = country]
数据
library(data.table)
library(lubridate)
ID <- c("1","1","1","1","1","1","2","2","2","3","3",NA,"4")
Date <- c("2017-01-01","2017-01-01", "2017-01-05", "2017-05-01", "2017-05-01","2018-05-02","2017-01-01", "2017-01-05", "2017-05-01", "2017-05-01","2017-05-01","2017-12-12","2017-12-12" )
Value <- c(2,4,3,5,2,5,8,17,17,3,7,5,3)
Country <- c("UK","UK","US","US",NA,"US","UK","UK","US","US","US","US","US")
Desired <- c(1,1,0,2,NA,0,1,2,2,2,2,1,1)
Desired_unrestricted <- c(2,2,1,3,NA,1,2,2,3,3,3,4,4)
dt <- data.frame(id=ID, date=Date, value=Value, country=Country, desired_output=Desired, desired_unrestricted=Desired_unrestricted)
setDT(dt)
提前致谢。
【问题讨论】:
标签: r date data.table