我正在使用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”与该问题无关)。 谢谢!
答案 0 :(得分:0)
使用基数R,您可以这样做。
我两次使用ave
,这是第一次根据METALIMNION
的组来确定列"T"
在何处具有SITE
。这是向量g
。
第二个平均METALIMNION
乘SITE
以及向量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