问题标签 [plyr]

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 投票
5 回答
5569 浏览

r - 将聚合值连接回原始数据框

我反复使用的设计模式之一是在数据帧上执行“分组依据”或“拆分、应用、组合 (SAC)”,然后将聚合数据连接回原始数据。例如,当在包含许多州和县的数据框中计算每个县与州平均值的偏差时,这很有用。我的汇总计算很少只是一个简单的平均值,但它是一个很好的例子。我经常通过以下方式解决这个问题:

这会产生很好的聚合数据,如下所示:

这行得通,但是有没有其他方法可以提高可读性、性能等?

0 投票
2 回答
7228 浏览

r - R:将数据框的每一行转换为列表项

我对数据帧有许多操作,我想加快使用这些操作mclapply()或其他lapply()类似的功能。我解决这个问题的最简单方法之一是使数据框的每一行成为列表中的一个小数据框。我可以plyr像这样很容易地做到这一点:

将数据作为列表后,我可以轻松地执行以下操作:

这很有效,但是我有很多数据,而且adply()步骤很慢。我尝试在adply步骤上使用多核并行后端,但即使我注册了 8 个处理器,它也从未使用过一个以上的处理器。我怀疑并行选项可能不适用于此类问题。

关于如何使这更快的任何提示?也许是一个基本的 R 解决方案?

0 投票
2 回答
423 浏览

r - plyr 应用程序,创建一个矩阵列表,每个矩阵对应于数据的一个子集

在一些帮助下,我想出了如何将边缘列表(也称为邻接列表)转换为邻接矩阵。 我想学习如何为大量边缘列表自动执行此操作,然后将生成的邻接矩阵放入列表中。

我猜 plyr 是做到这一点的最好方法,但如果你想告诉我如何使用循环来做到这一点,我也将不胜感激。对于好奇的人来说,这些数据代表了不同学校的社交网络。

这是我到目前为止所得到的:

0 投票
2 回答
798 浏览

r - 当值从一年到下一年增加时,将指示变量添加到长数据框

我有一个长数据框,其中包含三列fyearticdcvt(用于财政年度、股票代码和可转换债务总额)。大约有 18 个财政年度和几千个股票代码。我想添加一个指标变量,无论何时dcvt从一年上升到下一年。

我试过ddply了,但我丢失了该fyear列并且不知道如何取回它。

我还尝试使用reshape2包进行转换,然后运行for循环,但当然,这需要很长时间。

有没有办法让我快速做到这一点?我应该制作一个宽zoo物体然后使用diff吗?如果可以的话,我想避免通过时间序列。谢谢!

0 投票
1 回答
1685 浏览

r - 从 lmList 对象中提取 RMSE

我有以下代码从 lmList 对象中提取系数。

此代码工作正常。但是,这是提取系数的有效方法吗?

我的主要问题是,如何从同一个 lm.model 对象中提取 RMSE?

0 投票
2 回答
13132 浏览

r - R:使用 ddply 将函数应用于数据子集

我正在尝试使用 ddply 方法获取包含有关 3000 部电影的各种信息的数据框,然后计算每种类型的平均总收入。我是 R 新手,我已经阅读了此处与 ddply 相关的所有问题,但我似乎仍然无法正确理解。这是我现在拥有的:

我应该如何编写一个函数来取每组电影的“总”列中的值的平均值,按类型分组?我知道这似乎是一个简单的问题,但文档真的让我感到困惑,而且我对 R 语法还不太熟悉。

除了 ddply 之外,还有其他方法可以使这更容易吗?

谢谢!!

0 投票
4 回答
8778 浏览

r - 是否有将函数应用于每对列的 R 函数?

我经常需要对数据框/矩阵中的每一对列应用一个函数,并在矩阵中返回结果。现在我总是写一个循环来做到这一点。例如,要制作一个包含相关性 p 值的矩阵,我会写:

这有效,但对于非常大的矩阵来说非常慢。我可以在 R 中为此编写一个函数(通过假设如上所述的对称结果而不必将时间减半):

或者带有 Rcpp 的函数:

但即使在一个包含 100 个变量的非常小的数据集上,两者都相当慢(我认为 Rcpp 函数会更快,但我猜 R 和 C++ 之间的转换一直都会造成损失):

所以我的问题是:

  1. 由于这些函数的简单性,我假设这已经在 R 中的某个地方。是否有plyr执行此操作的应用程序或函数?我已经找过了,但一直没能找到。
  2. 如果是这样,它会更快吗?
0 投票
2 回答
5690 浏览

r - 如何加快汇总和ddply?

我有一个包含 200 万行和 15 列的数据框。我想用 ddply 对这些列中的 3 个进行分组(所有 3 个都是因子,并且这些因子有 780,000 个唯一组合),并获得 3 个列的加权平均值(权重由我的数据集定义)。以下是相当快的:

问题是我想使用 weighted.mean 而不是 mean 来计算我的聚合列。

如果我在同一个数据帧上尝试以下 ddply(注意,我强制转换为不可变),则以下内容在 20 分钟后不会完成:

此操作似乎很占用 CPU,但不是很占用 RAM。

编辑:所以我最终编写了这个小函数,它通过利用加权平均值的一些属性来“欺骗”,并对整个对象而不是切片进行乘法和除法。

当我运行时:

我获得了良好的性能,以及一些可重用的优雅代码。

0 投票
2 回答
2194 浏览

r - 如何从 plyr 输出中进行总结而不是长

我喜欢 plyr 将数据帧拆分为多个数据集,然后对每个数据集执行相同操作的能力。最好的部分是当它以整洁紧凑且标记良好的表格的形式向您显示结果时。我喜欢使用 each() 将一堆计算放入一行中。但是,我不明白为什么在 ddply 参数中使用 summarise 函数会破坏输出并使其变得冗长且未标记。看看这里,看看我的意思。你能告诉我我做错了什么吗?我更喜欢使用摘要。

让我们首先设置一个示例数据框。想象一下,您有 60 名参与者参加一项研究。其中20个很有趣,20个很聪明,20个很好。然后每个受试者都得到一个分数。

现在我想要一个表格,显示 3 种类型的人的平均分数、中位数分数、最低分数和最高分数

上面的行应该给出了一个漂亮的表格(3 行 - 每种类型 1 行,4 列数据)。唉,它给出了一个只有一列数字的长表,没有一个数字被标记。

上面的行给了我想要的东西。你能解释一下我对 ddply 语法的不理解吗?

0 投票
2 回答
506 浏览

performance - 如何重写“sapply”命令以提高性能?

我有一个名为“d”的 ~1,300,000 行和 4 列的 data.frame 和另一个名为“gc”的 ~12,000 行和 2 列的 data.frame(但请参见下面的较小示例)。

以下是“d”的样子:

这是“gc”:

我想通过合并“gc”中与“d”的第一列匹配的数据来向“d”添加第 5 列。目前我正在使用sapply

但是在真实数据上,它需要“非常长”的时间(我使用“system.time()”运行命令已经超过 30 分钟,但仍未完成)。

你知道我如何以一种聪明的方式重写它吗?或者我应该考虑使用plyr,也许使用“并行”选项(我的计算机上有四个内核)?在这种情况下,最好的语法是什么?

提前致谢。