Что означает ошибка в таблице данных с функцией "seq" - "Длина RHS должна быть либо равна 1, либо точно соответствовать длине LHS"? - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь:

  1. рассчитать разницу в продолжительности вызовов между полицейскими подразделениями, отвечающими на один и тот же вызов
  2. определить самую большую продолжительность среди группы вызовов с одним и тем же вызовомID
  3. в порядке убывания продолжительности

Мои шаги для этого приведены в фрагментах кода ниже.

Сначала я располагаю в порядке убывания по идентификатору (несколько вызовов с одним и тем же идентификатором), а затем упорядочиваю его по продолжительности вызова в часах (по убыванию).

Затем я превращаю свой data.frame в data.table.

Затем примените последовательности (по убыванию) по длительности.

call_duration_diff_by_unit[, duration_seq := seq(CALL_DURATION_HOURS), by = c("ID")]

Вот где возникает проблема: я получаю сообщение об ошибке

"Ошибка в [.data.table (call_duration_diff_by_unit,, := (duration_seq,: поставляются 2 элемента, которые должны быть назначены группе 1 размера 1 в столбце duration_seq. Длина RHS должна быть либо 1 (допустимы отдельные значения)) или точно соответствует длине LHS. Если вы хотите «переработать» RHS, пожалуйста, явно используйте rep (), чтобы сделать это понятным для читателей вашего кода. "

Единственное объяснение этой ошибкиЯ обнаружил, что был специфичен для уникального пакета, который я не использую. Я понимаю концепцию «переработки» сейчас, но не уверен, как это применимо к этому сценарию ... нет двух векторов с различной длиной.

Может ли R неправильно прочитать часть by = c("ID") в качестве второго ввода?

call_duration_diff_by_unit <- cad_cfs_data %>% 
  arrange(desc(ID), desc(CALL_DURATION_HOURS))

call_duration_diff_by_unit <- 
  data.table(call_duration_diff_by_unit)

call_duration_diff_by_unit[, duration_seq := seq(CALL_DURATION_HOURS), by = c("ID")]

Я ожидал, что он создаст уникальный числовой идентификатор (назначая 1 самой длинной продолжительности) для каждой группы уникального вызоваИдентификаторыtead, я получаю ошибку, и она не сохраняет переменную "duration_seq" для использования позже в коде.

1 Ответ

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

Я думаю, что то, что вы ищете, можно сделать проще с помощью специальных символов в data.table. Тот, который с .N очень полезен, потому что он просто подсчитывает количество строк в data.table, и если вы укажете группу, он будет считать количество строк в этой группе. Таким образом, код будет выглядеть так:

call_duration_diff_by_unit[, duration_seq := 1:.N, by = c("ID")]

Это то, что вы собираетесь?

...