При создании подэтапа,
длина RHS должна быть либо 1 (допустимы отдельные значения), либо точно соответствовать длине LHS,
в качестве сообщения об ошибке говорит, что правило не соблюдается.
Однако работает следующее:
tab.01 <- data.table( a = 1L:5L, b = 11L:15L )
tab.02 <- data.table( a = c(1L, 1L, 2L), x = c(11L, 12L, 22L) )
tab.01[ tab.02, x := i.x, on = "a"]
# a b x
# 1: 1 11 12
# 2: 2 12 22
# 3: 3 13 NA
# 4: 4 14 NA
# 5: 5 15 NA
Столбец x функционально не зависит от столбца a. Тем не менее, выполняется присваивание, и, если мое предположение верно, назначается последний элемент подгруппы.
Можно ли изменить это поведение по умолчанию , например, выбрать первый элемент? Следующие испытания не работают:
mult = "first"
не действует. tab.01[ tab.02, x := first(i.x), on = "a" ]
назначает значение 11L для всех совпадений. tab.01[ tab.02, x := first(i.x), on = "a", by = "a"]
результаты в ошибке, потому что i.x
больше не доступен (или любой другой столбец в i
). tab.01[ tab.02, x := first(i.x), on = "a", by = .EACHI ]
не вызывает ошибку, но и ничего не исправляет. Значения в группе переназначаются в порядке строк, поэтому последнее значение сохраняется.
Можно использовать версию tab.02
с функционально зависимыми столбцами:
tab.02[ , y := f_fd(x), by = "a" ] # e.g. f_fd <- data.table::first
tab.01[ tab.02, x := y, on = "a"]
Это самый краткий способ выполнить эту задачу?