聚合在多个列中

时间:2017-06-14 05:56:57

标签: r

我有超过50年的多站(+1000),因此我将df配置为列上的站点和行上的日期作为示例。 现在我需要在每列数据中对每年的参数进行求和,但是我必须知道在没有NA的情况下计算了多少个字段,以便为每个站点中的每年提供特定值。 我希望你们能帮助我,并对语法和语言表示抱歉。

year<-c(rep(2000,12),rep(2001,12),rep(2002,12), rep(2003,12))
data <- data.frame( year, month=rep(1:12,4),est1=rnorm(12*4,2,1),est2=rnorm(12*4,2,1),est3=rnorm(12*4,2,1))
data[3,3]<-NA 

1 个答案:

答案 0 :(得分:1)

和:

> apply(data[,-(1:2)], 2, tapply, data$year, sum, na.rm=T)
         est1     est2     est3
2000 23.46997 21.36984 28.24381
2001 27.32517 28.84098 24.11784
2002 23.41737 25.47548 23.82606
2003 24.63551 24.51148 28.17723

Non NA's:

> apply(!is.na(data[,-(1:2)]), 2, tapply, data$year, sum)
     est1 est2 est3
2000   11   12   12
2001   12   12   12
2002   12   12   12
2003   12   12   12

没有apply的版本(请参阅下面的@ r2evans评论):

sapply(data[,-(1:2)], tapply, data$year, sum, na.rm=T)

sapply(data.frame(!is.na(data[,3:5])), tapply, data$year, sum)