Более надежное выражение в предложении объединения файла data.table join? - PullRequest
0 голосов
/ 30 апреля 2019

Возможно ли для предложения on объединения data.table поддержка более сложных выражений, чем (в) равенствах? Например, если я попытаюсь выполнить

B[A,on=.(name = toupper(name))]

или

B[A,on=.(year = year(date))]

Я получаю сообщение об ошибке

Ошибка в [.data.table (B, A, on =. (Name = toupper (name))): Столбец (ы) [toupper (имя)] не найден в i

data.table, кажется, ищет столбец, имя которого является неоцененным выражением, а не оценивает выражение. Замена name = toupper(name) чем-то вроде name = eval(quote(toupper(name))), похоже, тоже не помогает.

Я всегда могу обойти это, добавив дополнительный столбец к одному или обоим входам (в данном случае name_upper := toupper(name)), а затем удалив ненужный столбец после объединения, но это неуклюже и громоздко.

Можно ли добиться аналога функциональности объединения SQL здесь?

1 Ответ

1 голос
/ 30 апреля 2019

вы можете попробовать что-то вроде этого:

пример данных

DT <- data.table( id = 1:3, name = c("John", "JOHN", "Steve"), stringsAsFactors = FALSE)
   id  name
1:  1  John
2:  2  JOHN
3:  3 Steve

код

DT[copy(DT)[, NAME := toupper(name)], id2 := i.id, on = .(name = NAME)][]

выход

   id  name id2
1:  1  John  NA
2:  2  JOHN   2
3:  3 Steve  NA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...