我有一个大型数据集,我正在尝试使用 dtplyr 进行整理。它由用于不同位置的大量(>1000)日期值对组成。原版使用了一个 pivot_longer,它在 dplyr 中运行良好,但在 dtplyr 中出现错误。有没有办法解决这个问题,保持 dtplyr 的性能优势?
这有效
library(tidyverse)
library(dtplyr)
library(data.table)
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 = "-"
)
错误信息是:
错误:不能对不存在的元素进行子集化。
x 位置 1 和 2 不存在。
i 只有 0 个元素。
运行rlang::last_error()
以查看错误发生的位置。
另外:警告信息:
预计 2 件。NA
缺失的部分以7 行 [1, 2, 3, 4, 5, 6, 7]填充。
rlang::last_error()
错误:内部错误:跟踪数据不是方形的。
更新 - 它现在给出这个错误信息:
UseMethod(“pivot_longer”)中的错误:没有适用于“pivot_longer”的方法应用于“c('dtplyr_step_first','dtplyr_step')”类的对象
顺便说一句,这也有效,但我认为它失去了 dtplyr 性能增益:
my_data_dt %>%
as_tibble() %>%
pivot_longer(
cols = everything(),
names_to = c(".value", "grid_square"),
names_sep = "-"
)