我有超过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
答案 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)