我想知道是否有人知道dplyr扩展包 (dbplyr和dtplyr) 是否允许在通常的 dplyr 工作流程中进行非等值连接?我很少需要data.table,但快速非等值连接是我总是需要的唯一时刻setDT,然后执行连接,然后用 切换回来as_tibble()。我浏览了 github 上的包中的问题,但没有找到这是计划中的还是已经实现的。
所以我正在尝试翻译一些dplyr代码。我试图从将dplyr转换为data.table的程序包中获得帮助,但仍然无法正常工作。错误是row_number来自dplyr..
我需要dplyr代码中的所有步骤(即使在这里没有用mtcars)
library(dplyr)
library(dtplyr) # from https://github.com/tidyverse/dtplyr
library(data.table)
mtcars %>% 
  distinct(mpg, .keep_all = TRUE) %>% 
  group_by(am) %>% 
  arrange(mpg, .by_group = TRUE) %>% 
  mutate(row_num = LETTERS[row_number()]) %>% 
  ungroup() 
# using dtplyr
dt <- lazy_dt(mtcars)
dt %>% 
  distinct(mpg, .keep_all = TRUE) %>% 
  group_by(am) %>% 
  arrange(mpg, .by_group = TRUE) %>% 
  mutate(row_num = LETTERS[row_number()]) %>% 
  ungroup() %>% 
  show_query()
#> unique(`_DT1`, by = "mpg")[order(am, mpg)][, `:=`(row_num = c("A", 
#> "B", "C", "D", "E", "F", "G", "H", "I", …Run Code Online (Sandbox Code Playgroud) 我有一个大型数据集,正在尝试使用 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 = "-"
)
Run Code Online (Sandbox Code Playgroud)
但这给出了错误:
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 = "-"
  )
Run Code Online (Sandbox Code Playgroud)
错误信息是:
错误:无法对不存在的元素进行子集化。
x 位置 1 和 2 不存在。
i 只有 0 个元素。
运行rlang::last_error()看看哪里出错了。
另外:警告消息:
预计 2 …
这个问题是关于理解,我要投资我的学习精力用于数据R.之间扯皮具体dplyr,dtplyr和data.table。我dplyr主要使用数据,但是当数据太大而无法使用时data.tabe,这种情况很少发生。因此,现在dtplyrv1.0已成为的接口data.table,从表面上看,我似乎再也不需要担心data.table再次使用该接口。
那么,目前尚不能使用的最有用的功能或方面data.table是什么dtplyr,而将来可能永远无法使用dtplyr?
从表面上看,dplyr借助的好处,data.table它听起来像dtplyr会超越dplyr。会不会有任何理由来使用dplyr,一旦dtplyr已经完全成熟?
注意:我不是在问dplyrvs data.table(就像在data.table vs dplyr中:一个人可以做得很好而另一个不能做得不好或做得不好吗?),但是鉴于在一个特定问题上一个人比另一个人更受青睐,为什么呢?牛逼dtplyr是使用工具。