问题标签 [dtplyr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
44 浏览

r - semi_join 和 anti_join 函数创建 dtplyr 对象而不是数据帧

所以我正在做一个项目,该项目需要我将数据帧与 dplyr 的 semi_join 和 anti_join 结合起来。但是,我没有创建一个 data.frame 作为输出,而是得到一个我无法使用的 dtplyr_step_subset 对象,我不知道它是如何工作的。(请注意,这只发生在我更新了我的 tidyverse 包之后)是否有一些关于连接函数的参数可以解决这个问题?

0 投票
0 回答
80 浏览

r - 结合dtplyr和multidplyr处理大型mutate操作

我正在组合dtplyrmultidplyr库来处理在一个非常大的数据库上执行的一些基本的变异/汇总操作。final_db_partition,合并后有时是 30m 行长。

我不知道我是否做错了什么,但 R 会话被中止或我完成了我的记忆。

R 版本 4.0.5 (2021-03-31) / 平台:x86_64-apple-darwin17.0 (64-bit) / 运行于:macOS Big Sur 10.16

我应该如何解决这个问题?

0 投票
0 回答
87 浏览

r - 如何使用带有 dtplyr lazy_dt() 数据的 sf 包在 r 中创建 geom_sf 图?

(帖子已被重新设计以更加清晰,并更新了所有链接)

最近了解了dtplyr包,因此试图通过使用lazy_dt()而不仅仅是dplyr来使用它们来使我现有的代码更快地工作。

但是当我运行它们时出现错误:

第一步:数据:

(更新正确的形状文件) Step1.2:从以下位置下载形状文件: https ://github.com/johnsnow09/covid19-df_stack-code/blob/main/in_countries.shp

step2:转换为lazy_dt()

第3 步:绘制lazy_dt()ievaccination_data2不起作用,因为绘制通常的数据框/tibble ievaccination_data起作用

给出错误:CPL_transform 中的错误(x,crs,aoi,管道,reverse,desired_accuracy,:与 STRSXP 不兼容:[type=NULL]。

下面的代码与vaccination_data作品

在此处输入图像描述

0 投票
1 回答
137 浏览

r - 如何使用 dtplyr / data.table ggplot 而不将其转换为数据框或小标题?

我第一次尝试dtplyr & data.table在我现有的dplyr代码中进行一些时间优化。

问题:如果我使用data.table / dtplyr数据对象,那么我无法使用ggplot进行绘图。在绘制管道/链命令之前,如果我只是将data.table / dtplyr对象转换为tibble ,那么它可以与ggplot一起使用,但它比完全使用data.frame/tibble需要更多的时间,这将在本文后面显示。

我的代码尝试和时间基准:

数据:

data.frame 对象

数据表对象

使用 data.table/dtplyr 对象绘图:

错误:data必须是数据框或其他fortify()可强制转换的对象,而不是具有类 dtplyr_step_group/dtplyr_step 的 S3 对象。

PS - 如果我as.tibble()在上面的代码块中取消注释,那么ggplot可以工作。


代码时间基准:

  1. data.table/dtplyr对象而不转换为 tibble
  1. 转换为tibble后的data.table/dtplyr对象
  1. data.frametibble对象

问题:那么我怎样才能使ggplotdata.table / dtplyr一起工作而不将其转换为data.frame / tibble



更新:对答案的回应)

谢谢@teunbrand,我主要使用下面的代码并添加了另一个功能,并将其置于 3 个场景中:

我创建了两个函数:(1)执行处理并且不对 tibble 进行强制,(2)在处理后将其强制为 tibble。

我总共在 3 个场景中运行了这些 - (1) data.table,(2) data.table 在处理后转换为 tibble,(3)从一开始就使用 tibble

由于未知原因,我的基准测试没有同时运行,所以我不得不一个接一个地运行它们。

目标:我的主要目标是将其合并到具有动态变量选择的闪亮应用程序中,因此希望使用data.table对其进行优化。但我想ggplot无法使用s3 objects / data.table

我得到的唯一时差是当我使用data.table并将其作为data.table传递时,否则没有任何好处。

0 投票
1 回答
123 浏览

r - 如何在不导入所有函数的情况下在包中使用 data.table?

我正在构建一个 R 包,我想用它dtplyr来执行各种数据操作。我的问题是,这dtplyr似乎只有在我导入整个data.table(即使用 roxygen #' @import data.table)时才有效。没有这个,我会收到如下错误:

如果我可以通过只导入某些函数来解决这个问题data.table,那就太好了,但包中似乎没有函数.()。我的知识data.table有限,但我只能假设它用于.()编辑解析的代码(类似于基础 R bquote()),但dtplyr由于某种原因需要data.table加载它才能工作。

我尝试了各种方法,例如withr::with_package("data.table", code)and requireNamespace("data.table"),但到目前为止,导入整个包是唯一可行的方法。这不是一个可行的解决方案,因为它通过从data.table.

注意,这个包包含一个项目,许多其他分析师将在未来进行工作。虽然简单地编写data.table代码在性能和一般良好实践方面可能更可取,但使用dtplyr翻译dplyr代码可以提高可读性和易用性,这在这种情况下更为重要。

0 投票
0 回答
36 浏览

r - Left_join 太大而无法处理

我正在尝试执行一些基于一对多实现的匹配left_join。问题是——即使使用集群计算运行整个事情——基本匹配会产生一个太大而无法处理的数据集。

我收到此错误:

连接本身并没有错误指定,但我需要找到一种方法一次完成所有操作。我试图将左侧数据库划分为更合理的块(按状态)并my_matching_function为每个块运行。

然而,即使对于 p 和 b 都有一个微样本数据库,这也是非常缓慢的。我应该怎么做才能加快整个过程?代码中有什么可以改进的吗

为缺乏可重复的例子道歉

这是我的简化版本my_matching_function

0 投票
0 回答
44 浏览

r - R结合使用新的readr/vroom延迟加载+ dplyr AND dtplyr/data.table?

我正在加载一个大型数据集,我需要过滤大约 1/20 的行,然后按 5 列 group_by 并总结剩下的 3 个。

此页面https://vroom.r-lib.org/articles/benchmarks.html 说由于惰性 altrep 实现,采样、过滤和分组聚合要快得多。

因为“一旦一个特定的向量完全实现,所有后续操作的速度应该与正常的 R 向量相同。” 我的问题是,过滤后使用 dtplyr 或 data.table 进行汇总操作是否有意义?

0 投票
1 回答
39 浏览

r - 为什么使用 bind_rows 不在 show_query() 中运行

如何获取 data.table 格式的最终​​查询?

如果不可能:如何将查询从 dplyr 重写为 data.table ?

错误:参数 1 必须是数据帧或命名的原子向量。

0 投票
0 回答
25 浏览

r - 使用“dtplyr”保留分组

动机

这个问题是在我开发这个解决方案时出现的,这是我在此处arrange_groups_4()回答的几个解决方案之一。为了寻求一种极其有效的方法来重新排列组内的行,我转向了更强大的性能,并且我将速度提高了近一个数量级!dtplyr

到目前为止,一切都很好。现在当我使用我的arrange_groups_4()功能时df

确实产生了适当dtplyr_step的输出。注意分组在df名义上是如何保留的:

问题

as_tibble()不幸的是,当我在dplyr工作流程中使用“访问结果”时

arrange_groups_4()或者在它自己的身体里

我得到的只是一个未分组 tibble的:

笔记

有趣的是,groups该对象的属性仍然存在,如对其执行所示:attr(., "groups")

然而正在执行,这应该会产生完全相同的元数据group_data(.)

定义分组结构的数据框。这些列给出了分组变量的值。最后一列,总是称为.rows,是一个整数向量列表,它给出了每组中行的位置。

而是给了我这个(不存在的)“分组”:

问题

我怎样才能将它转换dtplyr_step回一个分组 tibble,它无缝地融入dplyr工作流程,而不牺牲通过获得的性能dtplyr

0 投票
1 回答
51 浏览

r - 如何使用 data.table 应用自定义递归函数并按组循环遍历每个索引?

由于我在以下问题中找不到答案:

在没有显式 for 循环的情况下对组和行应用递归函数

如何模仿新行的拖动功能,例如在 Excel 中但在 R 中?

我将尝试提出与上述相关的新问题。即,我想根据先前值的输出将自定义函数按组递归地应用到当前行。

带有数据框和 for 循环的示例:

带有数据框和带有自定义函数的 for 循环的示例:

但是,对于 >1 行,data.frames 和 for 循环不是最佳的。

有没有什么办法可以用data.tableordtplyr和优化但也可以分组?

编辑: 见问题的可视化。

它应该首先像 in 一样从第二行开始for(i in 2:nrow(df),它应该使用the custom function if and only if group[i]==group[i-1] 在此处输入图像描述