问题标签 [purrr]

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 回答
1452 浏览

r - 使用 plyr/dplyr/purrr 向数据框添加多列的方法

我经常需要使用自定义函数一次通过附加的几列来改变数据框,最好是使用并行化。以下是我已经知道如何做到这一点的方法。

设置

假设我想要两个新列foocol = x + ybarcol = (x + y) * 100,但这些实际上是在自定义函数中完成的复杂计算。

方法 1:使用rowwiseand分别添加列mutate

这不是一个好的解决方案,因为它需要对每行进行两次函数调用,并且需要对x + y. 它也没有并行化。

方法2:欺骗ddply行操作

在这里,我通过拆分我刚刚创建的唯一列来欺骗ddply在每一行上调用一个函数。id但是,它很笨重,并且需要维护一个无用的列。

方法三:splat

我喜欢这个解决方案,因为您可以df在没有数组理解的情况下引用自定义函数中的列(如果需要,可以是匿名的)。但是,此方法不是并行化的。

方法四:by_row

purrr中的by_row函数消除了对唯一列的需要,但此操作不是并行化的。id

方法五:pmap_df

这是我找到的最佳选择。函数族pmap还接受匿名函数以应用于参数。不过,我相信会pmap_df转换df为列表并返回,因此可能会影响性能。

function(x, y, ...)我需要在函数定义中引用我计划用于计算的所有列,而不仅仅是function(r)行对象,这也有点烦人。


我错过了任何好的或更好的选择吗?我描述的方法有什么问题吗?

0 投票
0 回答
60 浏览

r - 如何将包含 for 循环的函数应用于具有多个组的数据框?

数据

嗨,这是这个问题的后续问题。基本上,我有以下数据框:

这些是示例数据。原始数据框有数百个变量的唯一值Vehicle.ID2。它表示车辆对,即“目标车辆#-前车#”。

我想做的事

我想使用现有变量估计 5 个新变量。由于新变量依赖于现有变量及其本身,for-loop因此使用了 a。示例数据 ( foo) 仅包含 1 个唯一的Vehicle.ID2。如果将以下for-loop内容直接应用于foo,它会给出预期的结果:

由于原始数据框有很多Vehicle.ID2s,我想for-loop在一个函数中使用它,然后将该函数应用于所有由 s 分割的数据组Vehicle.ID2

我尝试了什么和问题:

我尝试使用该purrr软件包。

功能

将函数应用于数据:

为什么会导致NULL?这是完全相同的功能。

0 投票
2 回答
1486 浏览

r - 如何从 purrr 中安全地提取结果?

数据

以下是示例数据集:

我想做的事:

我将以下函数应用于数据框veh

请注意,原始数据框有多个Vehicle.ID2s。我使用tidyrpurrr应用此功能。另外,我正在使用safelyin函数purrr来收集结果和错误。

这工作正常。现在,我想得到结果。使用和safely创建一个列表。对于示例数据: resulterror

如何仅将result部分作为新数据框获取?
我尝试使用foos <- unnest(foos, map(joo, transpose())),但没有奏效。

0 投票
2 回答
3872 浏览

r - 如何使用 purrr 和 dplyr 过滤列表元素并将列表导出到 Excel

我对使用 R 中的列表还很陌生,并且有一个快速的问题,也涉及使用purrr. 下面以太小的样本数据框为例。

如果您可以包括如何一次重命名列表元素而不是使用下面的两行,那么您将获得奖励:

所以接下来,如果我想过滤每个数据框Animals,然后使用下面的两行代码将每个数据框导出到 Excel 电子表格中:

但是,为了提高效率,我可以将两个数据帧加入 alistpurrr同时过滤每个数据帧。

对于上面的代码,我将为~filter每个动物使用多行,所以不确定是否有更有效的方法可以避免在仍然使用purrrand的同时编写许多不同的代码行dplyr

另外,我如何使用write.csvwith purrr。我可以将列表导出到一个电子表格中,但我不确定如何分解列表以便正确导出。此外,我可以将每个列表元素导出到单独的电子表格中。很高兴看到这两种情况的解决方案。

0 投票
2 回答
497 浏览

r - 使用 purrr 以编程方式创建新变量?

介绍

在最近参加了 Hadley Wickham 的函数式编程课程后,我决定尝试将一些课程应用到我的工作项目中。当然,事实证明我尝试的第一个项目比课堂上演示的示例更复杂。有没有人建议使用该purrr软件包以使下面描述的任务更有效?

项目背景

我需要将五分位组分配给空间多边形数据框中的记录。除了记录标识符之外,还有其他几个变量,我需要计算每个变量的五分位组。

这是问题的症结所在:我被要求识别一个特定变量中的异常值,并在整个分析中省略这些记录, 只要它不改变任何其他变量的第一个五分位组的五分位组成

问题

我已经组装了一个 dplyr 管道(参见下面的示例),它对单个变量执行此检查过程,但是我如何重写此过程以便我可以有效地检查每个变量?

编辑:虽然作为中间步骤当然可以将数据的形状从宽更改为长,但最终它需要返回其宽格式,以便它与@polygons空间多边形数据框的槽相匹配。

可重现的例子

你可以在这里找到完整的脚本:https ://gist.github.com/tiernanmartin/6cd3e2946a77b7c9daecb51aa11e0c94

库和设置

加载示例数据并从中抽取一小部分样本

计算有和没有异常值记录的五分位数组

在 的帮助下ggplot2,我可以看到在此示例中识别了六个异常值,并且它们的遗漏不会影响第一个五分之一组pop1990

受移除异常值影响的记录

重要的是,此信息在两个新变量中进行跟踪:qnt_1990_chng_lglqnt_1990_chng_dir

我现在需要找到一种方法来对数据框中的每个变量(即pop1960- pop2030)重复此过程。理想情况下,将为每个现有pop*变量创建两个新变量,并且它们的名称前面qnt_和后面都是_chng_diror _chng_lgl

purrr正确的工具吗?dplyr::mutate_? data.table?

0 投票
1 回答
2542 浏览

r - 关于使用 dplyr:: do vs purrr: map, tidy::nest, 进行预测的建议

我刚刚遇到了 purrr 包,我认为这会对我想做的事情有所帮助 - 我只是无法将它放在一起。

我认为这将在帖子中进行,但会讨论一个常见的用例,我认为许多其他人会遇到,所以希望这对他们也有用。

这就是我的目标:

  1. 从一个大数据集中在每个不同的子组上运行多个模型。
  2. 准备好这些模型,以便我可以检查 - 系数、准确性等。
  3. 从每个不同分组的保存模型列表中,能够将相应的模型应用于相应的测试集组。
  1. 我已经做到了这一点,但我不知道如何将相应的模型“映射”到相应分组值的“测试”数据集。
  2. 现在我也可能正在尝试使用相应组的训练数据从 linear_model1 或 linear_model2 的训练中获取残差。

models$linear_model1[[2]]$residuals 将向我显示 model1 的第二组的残差。我只是不知道如何将所有模型$linear_model1 $residuals 转移到训练数据集。

我的理解是 tidyr 的 nest() 函数所做的事情与我创建模型的 do() 创建时发生的事情相同。

再次只是寻找一种方法来轻松地将这些残差/训练预测“映射”到训练数据集,然后将相应的模型应用于我上面创建的看不见的测试数据集。

我希望这不会令人困惑,因为我在这里看到了很多承诺,我只是无法弄清楚如何将它们组合在一起。

我认为这是一项很多人都希望能够以这种更“自动化”的方式完成的任务,而是人们非常缓慢地一步一步完成的任务。

0 投票
2 回答
3291 浏览

r - 是否可以使用 map() 从 R 中的列表中提取多个项目?

map()通过使用purrr 包中的各种函数,您可以将整数或字符串传递给函数并从子列表中提取元素。这些工作正如我所期望的那样:

我的问题是,如何从这个列表中提取多个元素?如果我想要 A 和 B 的“沉默”,以及 A 和 B 的“猫”和“鱼头”(换句话说,A 和 B 的元素 1 和 2),这可能map()吗?如果没有,最好的方法是什么?

这是我认为可行的方法:

其中 1 指的是每个子列表中的第一个元素,而 2 指的是第二个元素。但这与list1上面的返回相同。usingc(1, 2)不起作用,因为它指的是嵌套结构(即[[1]][[2]])。我查看了通过 Google 找到的文档和一些示例,但没有运气。有任何想法吗?

更新:我应该解释一下,理想情况下我希望能够按名称选择元素,如“沉默”。然而,这似乎不太好用。(我有几个大列表,我想要更改的元素的位置)

0 投票
2 回答
183 浏览

r - 使用 purrr 生成硬币翻转

现在我正在学习如何在 r 中使用 purrr 包,并思考如何生成 1、2、...、99、100 次掷硬币的 5 个样本。我的形象是创建一个列表,应该看起来像..

谁能帮我弥补这个?

0 投票
2 回答
4317 浏览

r - 将 POSIXct 转换为 Date 类的函数

您好,我正在尝试编写一个接收数据帧的函数,它将所有 POSIXct 或 POSIXlt 类型转换为 R 中的 Date 类型。我已经创建了该函数的一部分,但我坚持迭代每个索引处的元素。

get data 函数似乎可以工作,但我不确定如何从 getdata 中获取每个元素并将其转换为 R 中的 Date 类。谢谢!

0 投票
1 回答
20269 浏览

json - Parse Error: "Trailing Garbage" while trying to parse JSON column in data frame

I have a log file that look like this. This is a text document that looks like:

I'm trying to parse the JSON in the Message column by:

But, I'm hitting the following error:

How can I get rid of the "trailing garbage"?