根据站点聚合具有NA值的数据

时间:2018-10-03 16:43:33

标签: r sorting dataset average

我正在使用EPA NLA数据集来查找某些湖泊数据的lim上平均温度。数据集如下所示:

SITE  DEPTH   METALIMNION   TEMP FIELD
1      0.0       NA            25.6
1      0.5       NA            25.1
1      0.8       T             24.9
1      1.0       NA            24.1  
1      2.0       B             23.0
2      0.0       NA            29.0
2      0.5       T             28.0

“ T”表示尾随的结束,我想对每个位置的所有相应温度值取平均值,包括“ T”以上。我什至不知道从哪里开始。 (“ B”与该问题无关)。 谢谢!

2 个答案:

答案 0 :(得分:0)

使用基数R,您可以这样做。

我两次使用ave,这是第一次根据METALIMNION的组来确定列"T"在何处具有SITE。这是向量g

第二个平均METALIMNIONSITE以及向量g

g <- with(NLA, ave(as.character(METALIMNION), SITE, 
              FUN = function(x) {
                x[is.na(x)] <- ""
                rev(cumsum(rev(x) == "T"))
                }))
NLA$AVG <- ave(NLA$TEMP.FIELD, NLA$SITE, g)

NLA
#  SITE DEPTH METALIMNION TEMP.FIELD   AVG
#1    1   0.0        <NA>       25.6 25.20
#2    1   0.5        <NA>       25.1 25.20
#3    1   0.8           T       24.9 25.20
#4    1   1.0        <NA>       24.1 23.55
#5    1   2.0           B       23.0 23.55
#6    2   0.0        <NA>       29.0 28.50
#7    2   0.5           T       28.0 28.50

答案 1 :(得分:0)

假设使用dplyr包,每个站点值只有一个“ T”:

library(dplyr)

data.frame(SITE=c(1,1,1,1,1,2,2),TEMP=c(25.6,25.1,24.9,24.1,23.0,29.0,28.0)) %>%
    group_by(SITE) %>%
    summarise(meanTemp=mean(TEMP))

结果:

# A tibble: 2 x 2
   SITE meanTemp
  <dbl>    <dbl>
1     1     24.5
2     2     28.5