根据R中第二列的标记计算平均值

根据R中第二列的标记计算平均值,r,R,我有一个数据集,由1列测量值和1列标记感兴趣的事件组成。我想计算每个“事件”后两次测量的平均值。因此,给定一个样本数据集: Data<-c(1,2,3,2,3,4,8,4,2,9,2,2,3,2,3,4,5,4,3,3,2,2,2,2,3) Event<-c(0,0,0,0,0,"Event",0,0,"Event",0,0,0,"Event",0,0,0,0,"Event",0,0,"Event",0,0,0,0) DF<-data.frame(Data,Event)

我有一个数据集,由1列测量值和1列标记感兴趣的事件组成。我想计算每个“事件”后两次测量的平均值。因此,给定一个样本数据集:

Data<-c(1,2,3,2,3,4,8,4,2,9,2,2,3,2,3,4,5,4,3,3,2,2,2,2,3)
Event<-c(0,0,0,0,0,"Event",0,0,"Event",0,0,0,"Event",0,0,0,0,"Event",0,0,"Event",0,0,0,0)

DF<-data.frame(Data,Event)


   Data Event
1     1     0
2     2     0
3     3     0
4     2     0
5     3     0
6     4 Event
7     8     0
8     4     0
9     2 Event
10    9     0
11    2     0
12    2     0

数据这是一种快速而肮脏的方式:

events <- which(DF$Event=="Event")
sapply(events,function(i)mean(DF[(i+1):(i+2),]$Data))
# [1] 6.0 5.5 2.5 3.0 2.0

事件这是一种快速而肮脏的方式:

events <- which(DF$Event=="Event")
sapply(events,function(i)mean(DF[(i+1):(i+2),]$Data))
# [1] 6.0 5.5 2.5 3.0 2.0

events此策略包括查找具有“Event”的行的索引,然后使用mapply从DF中提取事件后两个值的向量并取平均值。最后,我将平均值与原始事件索引相结合,以便您知道它来自何处

eventsat <- which(DF$Event=="Event")
eventmeans <- mapply(function(a,b) mean(DF$Data[a:b]), eventsat+1, eventsat+2)
cbind(eventsat, means)

eventsat此策略包括查找具有“事件”的行的索引,然后使用mapply从DF中提取事件后两个值的向量并取平均值。最后,我将平均值与原始事件索引相结合,以便您知道它来自何处

eventsat <- which(DF$Event=="Event")
eventmeans <- mapply(function(a,b) mean(DF$Data[a:b]), eventsat+1, eventsat+2)
cbind(eventsat, means)
eventsat