Я хотел бы сравнить одну данную строку с каждой отдельной строкой в другом столбце в пределах определенной группы (для этого конкретного второго секунды) в таблице данных.Например, предположим, у меня есть следующая таблица данных
>dt<- data.table(bSIDE = c(0,0,0,0,1,1,1,1,0,0),
EX = c(1,3,9,14,1,3,5,14,1,2),
second=c(0,0,0,0,0,0,0,0,1,1),
PRICE1=c(NA,NA,NA,NA,127.47,127.47,127.47,127.47,NA,NA),
PRICE2=c(127.49,127.48,127.58,127.46,NA,NA,NA,NA,127.48,127.48))
Я хотел бы сравнить первую строку в столбце PRICE1 в группе second = 0 и EX = 1 с каждой отдельной строкой в столбце PRICE2 в течение second = 0, так что если PRICE1: 127.47 больше, по крайней мере, один раз, чем цена без NA в столбце 2 (внутри группы second = 0), то он должен создать фиктив со значением 1, в противном случае следует принять значение 0. В этомВ этом случае ни в коем случае это условие не выполняется, поэтому для EX1 во втором = 0 следует создать фиктивную = 0.Эту процедуру следует выполнить для каждого EX в секундах группы = 0. И то же самое применяется, когда дело доходит до сравнения PRICE2 с PRICE1, но в этом случае условие меняется на противоположное, так что если PRICE2 для одного данного EX в течение секунды = 0 нижепо крайней мере, один раз, чем любая строка в PRICE1 в течение секунды = 0, чем она должна создать пустышку, принимающую значения 1 и 0 в противном случае.Таким образом, я хотел бы получить следующее:
> objective<- data.table(bSIDE = c(0,0,0,0,1,1,1,1,0,0),
EX = c(1,3,9,14,1,3,5,14,1,2),
second=c(0,0,0,0,0,0,0,0,1,1),
PRICE1=c(NA,NA,NA,NA,127.47,127.47,127.47,127.47,NA,NA),
PRICE2=c(127.49,127.48,127.58,127.46,NA,NA,NA,NA,127.48,127.48),
dPRICE1=c(NA, NA, NA, NA, 0, 0, 0, 0, NA, NA),
dPRICE2=c(0,0,0,1, NA, NA, NA, NA, NA, NA)
)
У меня есть потенциальное решение этой проблемы, но это очень "дорого" с точки зрения памяти.Решением было создать столбец для каждого обмена в группе bSIDE, а затем сравнить его построчно.Это решение потребляет много памяти, что мне не нужно, поскольку таблица данных может достигать даже 9 миллионов наблюдений.
Спасибо!