У меня возникли некоторые проблемы с условным оператором в функции, над которой я работаю.
Мне нужно оценить, достаточно ли данных в каждом триместре для каждого года и каждой станции мониторинга. Количество данных за первый триместр изменяется, если это високосный год.
Итак, я сделал вложенное l oop для поднабора в год, станцию и триместр, а затем подсчитал количество дней с действительными данными и оценил, было ли оно равным или большим, чем значение ref (то есть действительный триместр ).
Моя проблема в том, что l oop, который я сделал, чтобы решить эту проблему, помечает меня как недействительные некоторые данные, которые должны быть действительными. Я не могу найти причину, почему так я думаю, либо о том, как я сделал oop, либо об условных.
l oop:
X_trim_v<-data.frame()
for (i in unique(X_max18h$year)){
for (j in unique(X_max18h$id_station)){
for (k in unique(X_max18h$trim)){
X_m18<-subset(X_max18h, year == i & id_station == j & trim == k)
if (leap_year(i) == T & trim == 1 & length(X_m18$day) >= 67){
X_trim_v_tmp<-data.frame(year=i,id_station=j,trim=k,n=length(X_m18$day), validez="valido")
X_trim_v<-rbind(X_trim_v, X_trim_v_tmp)
} else if (leap_year(i) == F & trim == 1 & length(X_m18$day) >= 68){
X_trim_v_tmp<-data.frame(year=i, id_station=j, trim=k, n=length(X_m18$day), validez="valido")
X_trim_v<-rbind(X_trim_v, X_trim_v_tmp)
} else if (trim == 2 & length(X_m18$day) >= 68){
X_trim_v_tmp<-data.frame(year=i, id_station=j, trim=k, n=length(X_m18$day), validez="valido")
X_trim_v<-rbind(X_trim_v, X_trim_v_tmp)
} else if (trim == 3 | trim == 4 & length(X_m18$day) >= 69){
X_trim_v_tmp<-data.frame(year=i, id_station=j, trim=k, n=length(X_m18$day), validez="valido")
X_trim_v<-rbind(X_trim_v, X_trim_v_tmp)
} else{
X_trim_v_tmp<-data.frame(year=i, id_station=j, trim=k, n=length(X_m18$day), validez="invalido")
X_trim_v<-rbind(X_trim_v, X_trim_v_tmp)
}}}}
Данные, которые должны быть действительными:
year id_station trim n validez
2017 TLA 1 68 invalido
2018 CAM 1 68 invalido
2018 NEZ 1 68 invalido
2017 TAH 2 68 invalido
2018 LLA 2 68 invalido