我使用两个数据集。第一个数据集包含每分钟测量的荧光值。第二个数据集包含某些事件及其时间。我们知道这些事件会在事件时间之前和之后不久导致荧光值的峰值。
R中的简化可重现示例:
在这里,我提供了 R 代码的简化版本,用于将荧光值与事件相关联。我每分钟测量一系列荧光值。接下来,我有第二个数据集,其中包含在三个不同时间发生的三个事件 A、B 和 C。似乎每个事件周围的氟值都有三个大峰。
目标是将每个值分类为对应于事件,只要该值的时间落在事件发生时间的 15 分钟内。不属于任何事件的荧光值被归类为 NA。
设置种子
set.seed(10)
生成荧光值数据集和事件数据集
values <- data.table(date.time.value=seq(ymd_hms("2018-01-01 00:00:00"), by= "min", length.out = 200),fluor=5*sin(seq(0,20,length.out = 200)))+(abs(rnorm(200,6,1))+2)
events <- data.table(event=c("A","B","C"),date.time.event=c(ymd_hms("2018-01-01 00:20:00"),ymd_hms("2018-01-01 01:20:00"),ymd_hms("2018-01-01 02:20:00")))
使用 data.table 包:我将“事件”变量添加到值数据集。只要 date.time.value 在 date.time.event 的 15 分钟内,该变量就会采用事件的名称(在本例中为 A、B 或 C)。
values[, event:=events[.SD[, .(d_dn=date.time.value-15*60, d_up=date.time.value+15*60)], on=.(date.time.event>=d_dn, date.time.event<=d_up), event]]
结果如下。我们看到,对于每个事件 A、B 和 C,我们有一个荧光值峰值,并且其他荧光值具有 NA 作为事件:
ggplot(values, aes(date.time.value, fluor,col=event)) + geom_point()
一个真实的例子:
我设法通过对事件发生前几分钟或几分钟后发生的荧光值进行着色来关联这两个数据集。结果如下所示:
我错过了什么:
- 我想定义“峰”,以便在我的简化示例中,事件 B 的所有绿色荧光值都属于特定的“峰数 x”。目前,不可能区分同一事件的荧光值但来自不同的峰,因为我只观察到具有相应变量“事件”的荧光。
- 在简化的示例中,您可以看到(夸大)相当多的高荧光值被认为是 NA,即使它们的高值很可能是由事件引起的。因此,我正在寻找一种将荧光值与事件联系起来的更好方法,而不是简单地说“之前 15 分钟或之后 15 分钟”。
我几乎可以肯定这里一定有某种专门为我的问题而构建的 R 包,但我就是不知道是哪一个......