首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于R中第二列标记的均值计算

基于R中第二列标记的均值计算
EN

Stack Overflow用户
提问于 2014-05-07 04:45:18
回答 2查看 182关注 0票数 1

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

代码语言:javascript
复制
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

对于第6行中的事件,我希望计算7-8行的平均值(平均为8和4)。下一个事件在第9行,所以第10-11行的平均值(平均为9和2)等等。

我的实际数据是一个带有空白的csv,而不是事件列中的零,但是我不知道如何设置一个带有空行的DF。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-07 04:54:04

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

代码语言:javascript
复制
eventsat <- which(DF$Event=="Event")
eventmeans <- mapply(function(a,b) mean(DF$Data[a:b]), eventsat+1, eventsat+2)
cbind(eventsat, means)

不可否认的是,mapply可能是过分的,因为它会允许长度为2以外的向量,但如果总是两个,它可能也同样容易做到。

代码语言:javascript
复制
eventmeans <- with(DF, (Data[eventsat+1]+Data[eventsat+2])/2)
票数 1
EN

Stack Overflow用户

发布于 2014-05-07 04:53:17

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

代码语言:javascript
复制
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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23508903

复制
相关文章

相似问题

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