【问题标题】:pivot_longer gives error when using dtplyr使用 dtplyr 时,pivot_longer 会出错
【发布时间】:2020-07-20 19:31:25
【问题描述】:

我有一个大型数据集,我正在尝试使用 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件。在 7 行 [1, 2, 3, 4, 5, 6, 7] 中填充了 NA 的缺失部分。
rlang::last_error()
错误:内部错误:跟踪数据不是正方形。

更新 - 它现在给出这个错误信息:

UseMethod("pivot_longer") 中的错误: 没有适用于“c('dtplyr_step_first', 'dtplyr_step')”类对象的“pivot_longer”方法

顺便说一句,这也有效,但我认为它失去了 dtplyr 的性能提升:

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

【问题讨论】:

  • 只是一个想法:pivot_longertidyr 动词,而不是 dplyr 动词,这可以解释为什么它没有被翻译。
  • 谢谢,太好了。为了完整起见,我有:#meltmy_data_dt &lt;- my_data_dt %&gt;%as.data.table() %&gt;% melt.data.table(measure = patterns("^date-", "^value-"), value.name = c("date", "value"))# Fix variable names (conveniently I already have a list of variable names from an # earlier step in my scriptv_names &lt;- c("A", "B")my_data_dt$variable &lt;- v_names[my_data_dt$variable]
  • 你也可以看看:github.com/markfairbanks/tidytablegithub.com/TysonStanley/tidyfast(我自己没有测试过),他们试图缩小 tidyr - data.table 的差距
  • 打开问题的链接:github.com/tidyverse/dtplyr/issues/168
  • pivot_longer() 现在包含在dtplyr 的开发版本中,可以使用devtools::install_github("tidyverse/dtplyr") 进行安装。这应该在v1.2.0 is released 时起作用(我还没有在这个问题上测试过开发版本)。

标签: r dplyr data.table dtplyr


【解决方案1】:

Dtplyr 1.2.0 版现已在 CRAN 上可用,这意味着该问题现已解决!

对于遇到此错误的任何人,请检查/更新您的 dtplyr 版本以确保您正在运行 >=1.2.0:

install.packages("dtplyr")

(注意。这不会作为 tidyverse 软件包的一部分进行更新,因此请务必单独进行)

https://www.tidyverse.org/blog/2021/12/dtplyr-1-2-0/

https://cran.r-project.org/web/packages/dtplyr/index.html

【讨论】:

    猜你喜欢
    • 2021-06-28
    • 2020-08-10
    • 1970-01-01
    • 2021-07-06
    • 2023-04-06
    • 2020-03-22
    • 1970-01-01
    • 2017-07-04
    • 2017-09-09
    相关资源
    最近更新 更多