Этот код генерирует небольшое приближение моего набора данных.Как сбросить значение столбца вниз, начиная с динамически выбранной строки, по группе?
library(data.table)
stocks <- c("SPY","IBM","GOOG","ISRG")
dates <- seq(as.Date("2012-01-01"), by = "day", length.out = 10)
position <- 0
dt <- data.table()
for(i in 1:4){
tmp <- data.table(stock = stocks[i], date = dates, position = position)
dt <- rbind(dt,tmp)
}
В моем наборе данных, который> 50GB, эти исходные позиции и даты устанавливаются программно в одной строке через Подменю. Код ниже просто дает и пример того, как выглядит более крупный набор перед желательным решением.
dt[stock == "SPY" & date == dates[4], position := 5]
dt[stock == "IBM" & date == dates[6], position := 10]
dt[stock == "GOOG" & date == dates[7], position := -10]
dt[stock == "ISRG" & date == dates[3], position := -8]
Этим достигается желаемый результат, но не на практике для большего набора данных.
dt[stock == "SPY" & date > dates[4], position := 5]
dt[stock == "IBM" & date > dates[6], position := 10]
dt[stock == "GOOG" & date > dates[7], position := -10]
dt[stock == "ISRG" & date > dates[3], position := -8]
Искомое решение будет выполнять задачу по Подменю датам> первый день, когда позиция не равна нулю, в то время как группировка по акции.
Я думаю, что вы можете создать ключ/значение набора данных, а затем сделать объединение – akrun
Я думаю, что это возможно с помощью объединений, но как я могу ссылаться на даты для каждого акции, которые больше, чем дата, когда позиция не равна нулю? т.е. 2012-01-04/2012-01-10 для SPY и 2012-01-06/2012-01-10 для IBM. – JHall651
В объединениях без экви, это возможно, т. Е. 'Dt [newdt, position: = pos, on =. (Акции, дата> даты), by = .EACHI]' где 'pos' и' date' являются столбцы в данных ключа/значения 'newdt' – akrun