问题标签 [dplyr]
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.
r - 如何在R中的一个向量中累积添加值
我有一个看起来像这样的数据集
在这里,表示一个虚拟变量,表示一个人在那一年job2
是否是一个人。Manager
我想对这个数据集做两件事:首先,我只想保留该人Boss
第一次成为时的行。其次,我想查看一个人作为 a 工作的累积年限Manager
,并将此信息存储在变量 中cumu_job2
。因此,我想拥有:
我更改了我的示例并包含了 Worker 职位,因为这更多地反映了我想要对原始数据集执行的操作。此线程中的答案仅在数据集中只有 Managers 和 Boss 时才有效 - 所以任何关于使这项工作的建议都会很棒。我将不胜感激!!
r - data.table vs dplyr:一个能做的很好,另一个不能或做得不好?
概述
我比较熟悉data.table
,不太了解dplyr
。我已经阅读了一些出现在 SO 上的dplyr
小插曲和示例,到目前为止,我的结论是:
data.table
并且dplyr
在速度上具有可比性,除非有许多(即 >10-100K)组,以及在某些其他情况下(参见下面的基准)dplyr
具有更易于访问的语法dplyr
抽象(或将要)潜在的数据库交互- 有一些小的功能差异(请参阅下面的“示例/用法”)
在我看来 2. 并没有太大的分量,因为我对它相当熟悉data.table
,尽管我知道对于这两者的新手来说,这将是一个重要因素。我想避免争论哪个更直观,因为这与我从已经熟悉的人的角度提出的具体问题无关data.table
。我也想避免讨论“更直观”如何导致更快的分析(当然是真的,但同样,这不是我在这里最感兴趣的)。
问题
我想知道的是:
- 对于熟悉这些软件包的人来说,是否有更容易使用一个或另一个软件包编写代码的分析任务(即所需的击键与所需的深奥水平的某种组合,其中较少的每个都是一件好事)。
- 是否存在在一个包中比在另一个包中更有效地执行的分析任务(即超过 2 倍)。
最近的一个SO 问题让我对此进行了更多思考,因为在此之前,我认为dplyr
不会提供超出我在data.table
. 这是dplyr
解决方案(Q末尾的数据):
这比我对data.table
解决方案的破解尝试要好得多。也就是说,好的data.table
解决方案也非常好(感谢 Jean-Robert、Arun,并注意这里我更喜欢单一语句而不是严格最优的解决方案):
后者的语法可能看起来很深奥,但如果你习惯了它实际上是非常简单的data.table
(即不使用一些更深奥的技巧)。
理想情况下,我希望看到一些很好的例子,即dplyr
ordata.table
方法更简洁或性能更好。
例子
用法dplyr
不允许返回任意行数的分组操作(来自eddi 的问题,请注意:这看起来将在dplyr 0.5中实现,此外,@beginneR 显示了do
在@eddi 问题的答案中使用的潜在解决方法)。data.table
支持滚动连接(感谢@dholstius)以及重叠连接data.table
通过使用二分搜索同时使用相同的基本 R 语法的自动索引在内部优化表单的表达式DT[col == value]
或DT[col %in% values]
提高速度。有关更多详细信息和一个小基准,请参见此处。dplyr
提供标准评估版本的函数(例如regroup
,summarize_each_
),可以简化编程使用dplyr
(注意编程使用data.table
绝对是可能的,只需要仔细考虑,替换/引用等,至少据我所知)
- 我运行了自己的基准测试,发现这两个包在“拆分应用组合”样式分析中具有可比性,除非有大量组(> 100K),此时
data.table
会变得更快。 - @Arun在 joins 上运行了一些基准测试,表明随着组数的增加(随着包和 R 的最新版本的最新增强而更新),它的
data.table
扩展性更好。dplyr
此外,尝试获取唯一值时的基准测试速度提高了data.table
约 6 倍。 - (未经验证)
data.table
在较大版本的组/应用/排序上快 75%,而在较小版本上dplyr
快 40%(来自评论的另一个 SO 问题,感谢 danas)。 - 的主要作者 Matt对多达 20 亿行(RAM 中约 100GB)上的分组操作和 python
data.table
进行了基准测试。data.table
dplyr
pandas
- 80K 组的旧基准测试速度提高了
data.table
约 8 倍
数据
这是我在问题部分展示的第一个示例。
r - 如何使用 dplyr 进行编程
我喜欢dplyr
数据操作,但我不明白如何使用它进行编程。例如,要重新调整一些变量,我们可以这样做:
很酷。但是现在假设我想编写一个函数mutate
来缩放数据框中的所有变量。如何创建...
论点?我能想到的最好的事情是:
或者是否有更编程友好的替代界面?
r - 使用 dplyr 的快速频率和百分比表
tab
一段时间以来,我一直在使用一个小函数,它显示向量的频率、百分比和累积百分比。输出看起来像这样
优秀的dplyr
包激励我更新功能。现在我想知道如何使更新版本更快。这是旧功能
和新的基于dplyr
最后,一些性能基准:
tab2
除了非常短的向量之外,速度更快。性能提升在更大的向量中变得明显(参见x4
51002 obs)。它table
甚至比想象的要快得多。
现在我的问题是:如何进一步提高性能?创建具有频率和百分比的表是一个非常标准的应用程序,当您处理大型数据集时,快速实现非常好。
编辑:这是一个带有 2e6 向量的附加测试用例(包括data.table
下面提出的解决方案)
r - 替换 dplyr 中的“重命名”
我喜欢 plyr 的重命名功能rename
。我最近开始使用 dplyr,想知道是否有一种简单的方法可以使用 dplyr 中的函数重命名变量,就像 plyr 一样容易使用rename
?
r - 在 R 中运行统计信息
以下是我拥有的示例数据框。
我正在寻找计算运行统计数据 - 例如同比增长。这将是收入 [2002] - 收入 [2001]。
我可以使用 for 循环来做到这一点。但是 plyr 中是否有基本功能或任何东西可以更优雅地完成此任务?
r - 我无法将 postgresql schema.table 与 dplyr 包连接
我试图将 postgres 与 dplyr 函数连接起来
但是当我尝试连接 tbl
我认为问题是架构问题,因为 sql 应该是:
我做了my_tbl
<-tbl(my_db, 'mortalidad.def0307');
my_tbl <- tbl(my_db, c('mortalidad','def0307'))
没有解决办法。
我从 SQL 中与 dplyr 一起工作很有趣,但我希望解决这个问题并尝试 dplyr 技能。
提前致谢。
r - Extract a dplyr tbl column as a vector
Is there a more succinct way to get one column of a dplyr tbl as a vector, from a tbl with database back-end (i.e. the data frame/table can't be subset directly)?
That would have been too easy, so
But it seems a bit clumsy.
r - 在 dplyr mutate() 中返回一个列表
我在现实世界的问题中有一个返回列表的函数。有没有办法将它与 dplyr mutate() 一起使用?这个玩具示例不起作用-:
我看到它在新变量的第一个“列”中循环遍历函数的输出,但不明白为什么。
谢谢!
r - 使用 OR 使用 dplyr 过滤数据框的更好方法?
我在R中有一个数据框,其中包含列subject1
和subject2
(其中包含国会图书馆主题标题)。我想通过测试主题是否与批准的列表匹配来过滤数据框。例如,假设我有这个数据框。
并假设这是批准的主题列表。
我想要做的是按主题1或主题2过滤:
这会根据需要从原始数据框中返回项目 1、2 和 4。
这是使用or而不是和逻辑按多个字段过滤的最佳方法吗?似乎必须有更好,更惯用的方式,但我不知道它是什么。
也许更通用的提问方式是说,如果我将主题 1 和主题 2 结合起来,是否有一种方法可以测试一个向量中的任何值是否与另一个向量中的任何值匹配。我想写一些类似的东西: