pivot_longer выдает ошибку при использовании dtplyr - PullRequest
2 голосов
/ 08 апреля 2020

У меня большой набор данных, который я пытаюсь привести в порядок с помощью dtplyr. Он состоит из большого числа (> 1000) пар дата-значение для различных местоположений. Оригинал использует pivot_longer, который отлично работает в dplyr, но выдает ошибку в dtplyr. Есть ли способ исправить это, поддерживая преимущества производительности dtplyr?

Это работает

library(tidyverse)
library(dtplyr)

my_data_tb <- tribble(
  ~`date-A`, ~`value-A`, ~`date-B`, ~`value-B`,
  "date1", 1, "date2", 2,
  "date2", 1, "date3", 2 
)

my_data_tb %>% 
  pivot_longer(
  cols = everything(),
  names_to = c(".value", "grid_square"),
  names_sep = "-"
)

, но это дает ошибку:

my_data_dt <- as.data.table(my_data_tb)
my_data_dt <- lazy_dt(my_data_dt)

my_data_dt %>%
  pivot_longer(
    cols = everything(),
    names_to = c(".value", "grid_square"),
    names_sep = "-"
  )

Сообщение об ошибке is:

Ошибка: Невозможно поместить элементы, которые не существуют. x Места 1 и 2 не существуют. Есть только 0 элементов. Запустите rlang::last_error(), чтобы увидеть, где произошла ошибка. Дополнительно: предупреждающее сообщение: Ожидается 2 шт. Недостающие фрагменты заполнены NA в 7 рядов [1, 2, 3, 4, 5, 6, 7]. rlang::last_error() Ошибка: внутренняя ошибка: данные трассировки не квадратные.

Кроме того, это также работает, но я думаю, что он теряет прирост производительности dtplyr:

my_data_dt %>%
  as_tibble() %>%
  pivot_longer(
    cols = everything(),
    names_to = c(".value", "grid_square"),
    names_sep = "-"
  )
...