2012-04-04 24 views
1

我有一个数据框(71568x4)由每小时观察到的几个变量组成(总共是一天24小时)并包含许多NA。使用NAs从多行查找最大值

我想找到每个变量的每24小时的最大值(换句话说是每日最大值)。如果在任何一天的这个24小时内缺少12次或更多小时的观测数据,那么当天的数据被认为是丢失的,因此报告为NA。任何人都可以帮助我在R中做到这一点?

下面是一个示例例如:

tDate <- rep(c(19980101,19980102,19980103), each = 24) 
tTime <- rep(seq(1:24), 3) 
x1 <- c(c(1:4),rep(NA,7),c(2:10),6,2,9,1,rep(NA,4),c(4:23),c(2:8), 
     rep(NA,7),c(3:5),rep(NA,7)) 
x2 <- c(rep(NA,3),c(11:15),NA,c(3:15),rep(NA,10),c(7:10),NA,c(2:4),NA,3, 
     rep(NA,5),c(6:9),NA,c(8:20),rep(NA,5),5,1) 
datmat <- cbind(tDate,tTime,x1,x2) 

的输出将是这样

> matrix(c(10,23,NA,15,NA,20), byrow = FALSE, ncol = 2) 

提前非常感谢。

回答

2

我定义自定义函数取所需的最大值:

my.max <- function(vec) { 
    if(length(vec[is.na(vec)])>=12) { 
     return(NA) 
    } else { 
     return(max(vec, na.rm=T)) 
    } 
} 

然后使用plyr特别ddply

ddply(as.data.frame(datmat), .(tDate), summarise, x1=my.max(x1), x2=my.max(x2))