Я смотрел видео [1] Грега Реда о Pandas, чтобы увидеть, что могут делать Pandas, в сравнении с data.table. Я был удивлен, узнав, насколько сложно было объединить таблицы в data.table. Если вы посмотрите видео, особенно от @ 49: 00 до @ 52: 00 минут, вы увидите, что Pandas позволяет объединять таблицы на основе разных имен столбцов, и вы можете выбирать разные суффиксы для левой и правой таблиц. Я понимаю, что setkey используется для целей оптимизации [2], и понимаю, как объединять таблицы, используя те же имена столбцов [3]. Я попробовал объединить data.table, но у меня возникли большие трудности с настройкой параметра ключевого слова by=
с использованием разных имен столбцов. Итак, вот мои вопросы.
Возможно ли в data.table объединить таблицы на основе разных имен столбцов? Если да, то как? Если нет, то почему? Кроме того, что более полезно, разве эта функция не будет полезна? Мне кажется удивительным, что этот вопрос не поднимался раньше. Простите меня (и укажите на них), если это уже обсуждалось ранее.
Кстати, данные, о которых говорит Грег, можно найти на его гитхабе [4].
- https://www.youtube.com/watch?v=1uVWjdAbgBg
- https://stackoverflow.com/a/13686768/3892933
- Объединение таблиц с идентичными (без ключа) именами столбцов в R data.table
- https://github.com/gjreda/pydata2014nyc
3 ответа
Обновление. Все перечисленные ниже функции реализованы и доступны в текущей стабильной версии data.table v1.9.6
на CRAN.
По крайней мере, эти улучшения возможны для объединений в data.tables.
merge.data.table
получение аргументовby.x
иby.y
Использование вторичных ключей для соединения с использованием обеих форм, описанных выше, без необходимости устанавливать ключи, а путем указания столбцов на
x
иi
.
Самая простая причина в том, что мы еще не дошли до него.
by.x
и by.y
. Я вовсе не жалуюсь. Мне очень нравится data.table и я хочу, чтобы он преуспел. Я изучаю внутренности/код data.table и постараюсь внести свой вклад, как только смогу.
Обычно при объединении data.tables имена столбцов не имеют значения. Вам просто нужно убедиться, что обе таблицы имеют совместимый ключ.
library(data.table)
dt1<-data.table(a=letters[1:10], b=1:10)
setkey(dt1,a)
dt2<-data.table(x=letters[1:10], y=10:1)
setkey(dt2,x)
dt1[dt2]
В основном он присоединяется ко всем ключевым столбцам. Обычно вы присоединяетесь по ключу. Если вам действительно нужно указать неключевые столбцы, вы всегда можете преобразовать data.table в data.frame и использовать стандартную функцию merge()
merge(as.data.frame(dt1),dt2, by.x="a", by.y="x")
merge(as.data.frame(dt1),dt2, by.x="b", by.y="y")
Со ссылкой на страницу Rdatatable github, если вы хотите выполнять функции на своем объединять, а не просто объединять таблицы, вы также можете использовать d1[d2, somefunc, on = "A==W"]
, где A
- ваш столбец в d1
, а W
- ваш столбец в d2
.
Похожие вопросы
Связанные вопросы
Новые вопросы
r
R — это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, используйте минимально воспроизводимые примеры, которые другие могут запустить с помощью копирования и вставки. Показать желаемый результат. Используйте dput() для данных и укажите все небазовые пакеты с помощью library(). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. Для вопросов по статистике используйте https://stats.stackexchange.com.