расширение строк с использованием data.table дает ошибку об утилизации - PullRequest
1 голос
/ 01 августа 2020

Мне нужно расширить таблицу данных с одной строки на человека до одной с переменными строками на человека. Я знаю точное количество строк для каждого человека. Я все время сталкиваюсь с ошибкой из-за того, что не перерабатываю вектор, который я поставляю (см. Ниже).

Кажется, я не могу понять, как временно отключить эту функцию или как ее обойти.

пример:

x <- data.table(a = 1:5, b = letters[1:5])
x[, c := 1:a, by = b]

Выдает ошибку ниже

Error in `[.data.table`(x, , `:=`(c, 1:a), by = b) : Supplied 2 items to be assigned to group 2 of size 1 in column 'c'. The RHS length must either be 1 (single values are ok) or match the LHS length exactly. If you wish to 'recycle' the RHS please use rep() explicitly to make this intent clear to readers of your code.

Кажется, что другие функции, кроме rep(), должны быть разрешены. Но даже когда я оборачиваю это в rep(), это не помогает.

x[, c := rep(1:a, times = 1), by = b]

дает ту же ошибку.

Для чего это стоит, Я хочу 1 копию строки 1, 2 копии из строки 2, 3 копии строки 3 и т.д. c. В фактическом варианте использования количество добавляемых строк (представленное столбцом a) основано на вычислении ожидаемых строк для человека (представленного столбцом b).

Существует ли таблица data.table дружественный способ сделать это? Заранее спасибо.

1 Ответ

0 голосов
/ 01 августа 2020

Мы не можем назначить (:=), когда выходной столбец имеет другую длину, чем исходный. Вместо этого сохраните его в list

x[, .(c = 1:a), by = b][x, on = .(b)]

Или, если есть только два столбца и отношение 1-1

x[, .(c = seq(a)), .(b, a)]
...