2015-11-04 53 views
0

我有一个表(下面)。我想为2007年,2008年和2009年的每米数量平均采取措施2和3。然后我想忽略或删除剩余的几年:许多相同的措施的平均行数

MeterNo year measure 2 measure 3 
a 2005 5 8 
a 2006 10 6 
a 2007 5 7 
a 2008 4 2 
a 2009 2 2 
b 2005 4 6 
b 2006 8 1 
b 2007 2 7 
b 2008 10 1 
b 2009 1 1 
c 2005 3 0 
c 2006 10 4 
c 2007 7 3 
c 2008 7 2 
c 2009 9 1 
d 2005 8 0 
d 2006 6 3 
d 2007 9 6 
d 2008 1 8 
d 2009 2 2 

任何帮助表示赞赏;我无法将我想要执行的操作转换为命令。

+0

'transform(subset(your.data.frame,year%in%2007:2009),avg = mean(c(measure2,measure3)))'? –

回答

0

下面,我提供了一个dplyr方法来做到这一点。希望有人也会告诉你一个基础R的方式来完成这一切。

首先,我创建了一些类似于您的数据结构的假数据。

library(dplyr) 

df <- data.frame(MeterNo = sample(c(LETTERS[1:3]), 100, replace=TRUE), 
       Year = sample(c(2005:2009),100,replace=TRUE), 
       measure2 = runif(100), measure3=runif(100)) 

df$newMeasure <- rowMeans(df[,c('measure2','measure3')]) 

现在我有一个data.frame 5列。以下代码执行以下操作:首先根据年份和仪表编号对数据进行分组。然后我计算上述计算的measure2measure3平均值(称为newMeasure)。在那之后,我忽略不等于2007,2008,或2009年

df %>% 
    group_by(Year, MeterNo) %>% 
    summarize(mean(newMeasure)) %>% 
    filter(Year %in% c(2007:2009)) 

肯定有其他方法可以做到这同一过程中的所有年。这听起来有点像家庭作业问题,但我不打算得出任何结论。 ;)