1

我有一个数据框(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)

提前谢谢了。

4

1 回答 1

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))
于 2012-04-04T20:00:42.903 回答