R: сравнение каждой строки с предыдущей и ведение счета

У меня есть data.frame, который выглядит так:

> head(df,10)
              DateTime   BP1 BQ1   BP2 BQ2   BP3 BQ3   BP4 BQ4   BP5 BQ5
1  2015-09-16 09:15:01 70730   1     0   0     0   0     0   0     0   0
2  2015-09-16 09:15:01 70735   1 70730   1 70285   1 70185   1     0   0
3  2015-09-16 09:15:01 70905   1 70735   3 70730   1     0   0     0   0
4  2015-09-16 09:15:01 70910   1 70905   1 70735   2 70730   1     0   0
5  2015-09-16 09:15:03 70905   1 70900   1 70730   1 70230   1 70220   1
6  2015-09-16 09:15:06 70910   1 70905   2 70900   1 70795   1 70730   1
7  2015-09-16 09:15:06 70905   2 70900   1 70795   1 70730   1 70220   1
8  2015-09-16 09:15:06 70910   1 70905   2 70900   1 70795   1 70730   1
9  2015-09-16 09:15:07 70915   1 70910   1 70905   1 70900   1 70795   1
10 2015-09-16 09:15:07 71000   1 70915   1 70905   1 70785   1 70730   1

BP = BidPrice и BQ = BidQty

Моя цель состоит в том, чтобы сравнить каждую строку с предыдущей и посмотреть, есть ли какие-либо изменения / добавления / отмены и на основании этого дать ей оценку и добавить их.

Например, вы можете увидеть df[1,2] = df[2,4], чтобы получить счет -1, поскольку цена опустилась на 1 уровень.

Тогда df[4,4] = df[5,2], так что это будет означать +1, поскольку цена поднялась на один уровень вверх.

И так далее... Сделайте это для каждого ряда, а затем суммируйте баллы для этого ряда. Таким образом, выходные данные должны быть вектором или data.frame с положительными и отрицательными целыми числами.

То, что у меня есть, очень мало, и я уже несколько часов ломаю голову над этим и ничего не получил. Я думаю, что я закончил с бесконечным циклом: мой код следующий:

mod<- function(file, level = 5){
  whole_data<- read.csv(file = file,header = FALSE,sep = "", col.names = c("DateTime","Seq","BP1","BQ1","BO1","AP1","AQ1","AO1","BP2","BQ2","BO2","AP2","AQ2","AO2","BP3","BQ3","BO3","AP3","AQ3","AO3","BP4","BQ4","BO4","AP4","AQ4","AO4","BP5","BQ5","BO5","AP5","AQ5","AO5","BP6","BQ6","BO6","AP6","AQ6","AO6","BP7","BQ7","BO7","AP7","AQ7","AO7","BP8","BQ8","BO8","AP8","AQ8","AO8","BP9","BQ9","BO9","AP9","AQ9","AO9","BP10","BQ10","BO10","AP10","AQ10","AO10"), colClasses = c(NA, rep("integer",31), rep("NULL", 30)))
  whole_data<- whole_data[which(whole_data$DateTime != 0),]
  whole_data$DateTime= as.POSIXct(whole_data$DateTime/(10^9), origin="1970-01-01")    #timestamp conversion 
  df<- data.frame(DateTime= whole_data$DateTime, BP1 = whole_data$BP1, BQ1=whole_data$BQ1, BP2 = whole_data$BP2, BQ2=whole_data$BQ2, BP3 = whole_data$BP3, BQ3=whole_data$BQ3, BP4 = whole_data$BP4, BQ4=whole_data$BQ4, BP5 = whole_data$BP5, BQ5=whole_data$BQ5)
  v<- NULL
for(i in 1:nrow(df)){
  for(j in seq_along(c(2,4,6,8,10)))
  if(level == 5){
    x <- df[i+1,j]==df[i,c(2,4,6,8,10)]
    y<- which(x==TRUE)
    v[i]<- c(v,(y-(j-(j-1))*-1))
    i=i+1
  }
  v
}
}

Для тех, кто имеет опыт работы с финансами, я пытаюсь проанализировать электронную книгу заказов, фиксируя изменения, отмены и новые заказы. Это только первый шаг из многих, гораздо больше, чем я пытаюсь сделать, но любые указатели / комментарии / помощь, я уверен, будут иметь большое значение и будут высоко оценены.

Какой самый быстрый способ это сделать? Для петли? Я действительно потерялся относительно того, как я должен идти об этом!! Все, что укажет мне правильное направление, будет высоко оценено.

Пожалуйста, дайте мне знать, если требуется какая-либо другая информация.

0 ответов

Другие вопросы по тегам