Ответ 1
Я не уверен, хорошо ли я понимаю проблему, и я также начал читать документы библиотеки data.table, но я думаю, что если вы хотите получить столбцы y, а также сделать что-то для столбцы a, вы можете попробовать что-то вроде:
> x[y,a*y]
foo boo
[1,] 5 50
[2,] 8 44
[3,] 9 36
[4,] 8 26
[5,] 5 14
Здесь вы возвращаете столбцы y, умноженные на столбец x. Если вы хотите получить x foo, умноженное на y boo, попробуйте:
> y[,x*boo]
foo a
[1,] 10 50
[2,] 22 44
[3,] 36 36
[4,] 52 26
[5,] 70 14
После редактирования: благодарю вас @Prasad Chalasani, что делает вопрос более ясным для меня.
Если предпочтительным является простое объединение, тогда должно работать следующее. Я составил более сложные данные, чтобы увидеть действия глубже:
x <- data.table( foo = 1:5, a=20:24, zoo = 5:1 )
y <- data.table( foo = 1:5, b=30:34, boo = 10:14)
setkey(x, foo)
setkey(y, foo)
Таким образом, для каждой таблицы данных добавлен только дополнительный столбец. Посмотрим merge
и сделаем это с помощью data.tables
:
> system.time(merge(x,y))
user system elapsed
0.027 0.000 0.023
> system.time(x[,list(y,x)])
user system elapsed
0.003 0.000 0.006
Из которого последний выглядит намного быстрее. Результаты не идентичны, но могут использоваться одинаково (с дополнительным столбцом последнего запуска):
> merge(x,y)
foo a zoo b boo
[1,] 1 20 5 30 10
[2,] 2 21 4 31 11
[3,] 3 22 3 32 12
[4,] 4 23 2 33 13
[5,] 5 24 1 34 14
> x[,list(x,y)]
foo a zoo foo.1 b boo
[1,] 1 20 5 1 30 10
[2,] 2 21 4 2 31 11
[3,] 3 22 3 3 32 12
[4,] 4 23 2 4 33 13
[5,] 5 24 1 5 34 14
Итак, чтобы получить xy
, мы можем использовать: xy <- x[,list(x,y)]
. Для вычисления одностолбцовой таблицы данных из xy$foo * xy$boo
может работать следующее:
> xy[,foo*boo]
[1] 10 22 36 52 70
Ну, результат - это не таблица данных, а вектор.
Обновление (29/03/2012): спасибо за @David за то, что я обратил внимание на то, что в приведенных выше примерах были использованы merge.data.table
.