Как вы работаете с идентично названными, не ключевыми столбцами при подключении data.tables? Я ищу решение для table.field
нотации в SQL.
Например, давайте скажем, что у меня есть таблица DT, которая заполняется новыми данными для столбца v
каждый период времени. У меня также есть таблица DT_HIST, которая хранит записи из предыдущих периодов времени (t
). Я хочу найти разницу между текущим и предыдущим периодом времени для каждого x
В этом случае: DT - период времени 3, а DT_HIST имеет периоды времени 1 и 2:
DT <- data.table(x=c(1,2,3,4),v=c(20,20,35,30))
setkey(DT,x)
DT_HIST <- data.table(x=rep(seq(1,4,1),2),v=c(40,40,40,40,30,25,45,40),t=c(rep(1,4),rep(2,4)))
setkey(DT_HIST,x)
> DT
x v
1: 1 20
2: 2 20
3: 3 35
4: 4 30
> DT_HIST
x v t
1: 1 40 1
2: 1 30 2
3: 2 40 1
4: 2 25 2
5: 3 40 1
6: 3 45 2
7: 4 40 1
8: 4 40 2
Я хотел бы присоединиться к DT
с DT_HIST[t==1,]
на x
и рассчитать разницу в v
.
Простое соединение таблиц приводит к столбцам v
и v.1
.
> DT[DT_HIST[t==2],]
x v v.1 t
1: 1 20 30 2
2: 2 20 25 2
3: 3 35 45 2
4: 4 30 40 2
Тем не менее, я не могу найти способ ссылаться на разные столбцы v
при выполнении соединения.
> DT[DT_HIST[t==2],list(delta=v-v.1)]
Error in `[.data.table`(DT, DT_HIST[t == 2], list(delta = v - v.1)) :
object 'v.1' not found
> DT[DT_HIST[t==2],list(delta=v-v)]
x delta
1: 1 0
2: 2 0
3: 3 0
4: 4 0
Если это дубликат, прошу прощения. Я искал и не мог найти аналогичный вопрос.
Кроме того, я понимаю, что я могу просто переименовать столбцы после присоединения, а затем запустить мое желаемое выражение, но я хочу знать, делаю ли я это совершенно неправильно.