У меня два ДТ. Я хочу соединить DT1 с DT2 на основе столбца и взять столбец из DT2.
DT1:
id place
1: id1 A
2: id2 B
3: id3 B
4: id4 C
5: id5 C
DT2:
place rank
1: A 3
2: B 2
3: C 1
4: D 3
5: E 2
Expected:
id place rank
1: id1 A 3
2: id2 B 2
3: id3 B 2
4: id4 C 1
5: id5 C 1
Прямо сейчас я попробовал -
dt1 [dt2, on = c ('место'), nomatch = 0]
Я думал, что это отобразит все строки на основе значения в столбце place
и добавит к нему столбец rank
. Но я получаю сообщение об ошибке декартова.
Error in vecseq(f__, len__, if (allow.cartesian || notjoin || !anyDuplicated(f__, :
Join results in <> rows; more than <> = nrow(x)+nrow(i). Check for duplicate key values in i each of which join to the same group in x over and over again. If that's ok, try by=.EACHI to run j for each group to avoid the large al
location. If you are sure you wish to proceed, rerun with allow.cartesian=TRUE. Otherwise, please search for this error message in the FAQ, Wiki, Stack Overflow and data.table issue tracker for advice.
Мой первый вопрос: я не понимаю, как здесь образуется декартова система? Это потому, что в моем первом DT есть несколько строк на одну и ту же дату?
Во-вторых, как мне этого добиться правильно?
Я также пробовал правое внешнее соединение вместо внутреннего. Я получаю ту же ошибку.
allow.cartesian = TRUE
- person akrun   schedule 14.10.2020on
есть дубликаты, это будет проблемой. Пожалуйста, проверьте, присоединяетесь ли вы по уникальному элементу - person akrun   schedule 14.10.2020place
в обоих наборах данныхdt1[, .N, place]
иdt2[, .N, place]
- person akrun   schedule 14.10.2020mult = 'first'
, а затем выполните присвоение (:=
), т.е.dt1[dt2, on = .(place), rank := rank, mult = 'first']
- person akrun   schedule 14.10.2020