данные подмножества с пропущенными значениями - PullRequest
0 голосов
/ 31 августа 2018

У меня есть необработанные данные с переменной времени, которые я хотел бы извлечь из кадра данных («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», я найду значения вплоть до первого случая отсутствия данных. Я полагаю, что при дальнейшем рассмотрении проблема заключается в функции подмножества, которая останавливается при достижении первого появления пропущенных значений.

Как я могу изменить функцию подмножества, чтобы просто пропустить пропущенные значения и перейти к подмножеству следующего существующего набора значений?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...