R использует смазку с data.table для сопоставления дат

Следующий код не работает

a = data.table(date=seq(ymd('2001-6-30'),ymd('2003-6-30'),by='weeks'))
a = a[,list(date=date,a=rnorm(105),b=rnorm(105))]

b = seq(ymd('2001-6-30'),ymd('2001-07-28'),by='weeks')

a[date %in% b]

с сообщением

Empty data.table (0 rows) of 3 cols: date,a,b

Может ли кто-нибудь помочь определить, что я делаю неправильно. Он должен найти данные.


person Tahnoon Pasha    schedule 05.06.2013    source источник
comment
спасибо @G.Grothendieck, я внесу изменения.   -  person Tahnoon Pasha    schedule 05.06.2013


Ответы (1)


Ничего общего с lubridate.

Ваша проблема заключается в области охвата. У вас есть столбец b в вашей таблице данных. data.table будет искать сначала в data.table, а затем вверх по пути поиска. Он не может сказать, что вы хотите искать b в parent.frame

Итак, переименуйте свой вектор в родительской (глобальной) среде

B <- b
a[date %in% B]

         date           a          b
1: 2001-06-30 -1.89904968  0.9230171
2: 2001-07-07  0.08599561 -0.0440927
3: 2001-07-14 -0.28606686  0.4649957
4: 2001-07-21  0.39191680  0.2907855
5: 2001-07-28  0.18732463 -0.1743267
person mnel    schedule 05.06.2013