У меня есть необработанные данные с переменной времени, которые я хотел бы извлечь из кадра данных («F1») на основе критериев времени в другом кадре данных («period_F1»), и впоследствии выполнить несколько моделей регрессии для каждого подмножества, которое я хотите сохранить значения наклона и r-квадрата. Однако некоторые из этих критериев относятся к данным, которых нет в файле необработанных данных.
#Example of raw data to be subsetted - F1
TIME DO
1 2017-10-30 07:26:00 6.034845
2 2017-10-30 07:56:00 6.091455
3 2017-10-30 08:26:00 6.140247
4 2017-10-30 08:56:00 6.212884
5 2017-10-30 09:26:00 6.349220
6 2017-10-30 09:56:00 6.531679
7 2017-10-30 10:26:00 6.679428
8 2017-10-30 10:56:00 6.836411
9 2017-10-30 11:26:00 6.960669
#Example of known periods_F1
Unique.ID.no. FLUME START END
1 1 1 2017-11-08 06:33:00 2017-11-08 08:32:00
2 5 1 2017-11-08 09:04:00 2017-11-08 11:52:00
3 9 1 2017-11-08 12:18:00 2017-11-08 15:05:00
4 13 1 2017-11-08 15:39:00 2017-11-08 17:49:00
5 17 1 2017-11-08 18:19:00 2017-11-08 23:32:00
6 21 1 2017-11-09 00:06:00 2017-11-09 05:15:00
7 25 1 2017-11-09 05:55:00 2017-11-09 08:37:00
8 29 1 2017-11-09 09:07:00 2017-11-09 11:49:00
9 33 1 2017-11-09 12:21:00 2017-11-09 15:03:00
Сначала я создаю функцию, которая подгруппирует данные на основе временного интервала из известных критериев в другом кадре данных. Я также строю список, в котором я буду хранить эти подмножества данных, а также фрейм данных, в котором я буду хранить суммарные коэффициенты для каждой регрессии.
# function for subsetting data and exports oxygen data
oxygensubset<-function(df,time,start,stop) {
o2<-subset(df, time >= start & TIME <= stop) return(o2)}
DO_F1<-list()
DO_DATA<-data.frame(matrix(NA,nrow = nrow(periods_F1), ncol=2)) # Build dataframe, with number of periods as rows - to which we paste Slopes and r2
colnames(DO_DATA)<-c('Slope','R') # Change column names on dataframe, one for slope one for r2
Затем в одном коде я запускаю циклическое подмножество на основе этих известных критериев, а также циклическую линейную регрессию.
for(i in 1:nrow(periods_F1)){ # repeating code for all subset
DO_F1[[i]]<-oxygensubset(F1,F1$TIME,periods_F1$START[i],periods_F1$END[i])
DO_R<- try(update(lm(DO~TIME, data = DO_F1[[i]])),TRUE) # Linear model
if(isTRUE(class(DO_R == "try-error"))){return(NULL)} else( # Null if there are missing data....
DO_DATA$Slope[i] <- summary(DO_R)$coefficients[2]) # slope values to rows
DO_DATA$R[i] <-summary(DO_R)$r.squared # r2 values to rows
}
Если я посмотрю на «DO_DATA», я найду значения вплоть до первого случая отсутствия данных. Я полагаю, что при дальнейшем рассмотрении проблема заключается в функции подмножества, которая останавливается при достижении первого появления пропущенных значений.
Как я могу изменить функцию подмножества, чтобы просто пропустить пропущенные значения и перейти к подмножеству следующего существующего набора значений?