我有一组格式如下的数据:
ID Minutes Value
xxxx 118 3
xxxx 121 4
xxxx 122 3
yyyy 122 6
xxxx 123 4
yyyy 123 8
... ... ....
每个ID是一个患者,每个值都表示该分钟内的血压。我想为每个点之前的60分钟和之后的60分钟创建一个滚动平均值。但是-如您所见,缺少分钟(因此我不能只使用行号),并且我想为每个唯一ID创建平均值(因此ID xxxx的平均值不能包含分配给ID yyyy的值)。听起来好像rollapply或rollingstat可能是选项,但尝试将其组合在一起几乎没有成功...
请让我知道是否需要进一步说明。
最佳答案
您可以轻松填写缺少的分钟(值将设置为NA),然后使用rollapply
library(data.table)
library(zoo)
## Convert to data.table
DT <- data.table(DF, key=c("IDs", "Minutes"))
## Missing Minutes will be added in. Value will be set to NA.
DT <- DT[CJ(unique(IDs), seq(min(Minutes), max(Minutes)))]
## Run your function
DT[, rollapply(value, 60, mean, na.rm=TRUE), by=IDs]
另外,您无需保留“填充”的分钟数/NA值:
您可以一次完成所有操作:
## Convert your DF to a data.able
DT <- data.table(DF, key=c("IDs", "Minutes"))
## Compute rolling means, with on-the-fly padded minutes
DT[ CJ(unique(IDs), seq(min(Minutes), max(Minutes))) ][,
rollapply(value, 60, mean, na.rm=TRUE), by=IDs]
关于r - 不规则时间序列上的条件滚动平均值(移动平均值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21372735/