使用NA查找多行的最大值

时间:2012-04-04 19:50:50

标签: r matrix

我有一个数据框(71568x4),包含几个每小时观察到的变量(一天24小时),并且包含许多NA。

我想找到每个变量每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)

非常感谢提前。

1 个答案:

答案 0 :(得分: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))