问题标签 [split-apply-combine]

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 投票
2 回答
24962 浏览

r - ddply + summarise 用于在大量列中重复相同的统计函数

好的,接下来是第二个 R 问题。

我的数据:

基本上通常我会使用ddply和的组合summarize来计算合奏(例如全年每小时的平均值)。

在上述情况下,我将创建一个类别,例如小时(例如strptime(data$Timestamp,"%H") -> data$hour,然后在 中使用该类别ddply,例如ddply(data,"hour", summarize, St_01=mean(St_01), St_02=mean(St_02)...)按每个列的类别进行平均。

但这是它变得粘稠的地方。我有 40 多列要处理,我不准备将它们一一键入作为summarize函数的参数。我曾经在 shell 中编写一个循环来生成这段代码,但这不是程序员解决问题的方式吗?

所以祈祷告诉,有没有人有更好的方法来实现相同的结果,但击键次数更少?

0 投票
2 回答
86364 浏览

python - python pandas, DF.groupby().agg(), column reference in agg()

On a concrete problem, say I have a DataFrame DF

I want to find, for every "word", the "tag" that has the most "count". So the return would be something like

I don't care about the count column or if the order/Index is original or messed up. Returning a dictionary {'the' : 'S', ...} is just fine.

I hope I can do

but it doesn't work. I can't access column information.

More abstractly, what does the function in agg(function) see as its argument?

btw, is .agg() the same as .aggregate() ?

Many thanks.

0 投票
2 回答
986 浏览

r - 删除合并时间序列中的观察值

我有一个垂直排列(堆叠)的合并时间序列data.frame,如下所示:

在每个“项目的”子系列/子组中,我需要识别并删除*在观察到第一个正 qty_sold 的那一天之前的所有观察结果*。例如,对于“橙色”系列,这意味着淘汰第 1 天到第 4 天,而对于“锤子”系列,这意味着淘汰前 2 天。


(如果上面的解释不清楚):从数据集中的每个子系列中,我需要删除从 date = Day_1 到 date = Day_k 的所有天,这样对于间隔 1 中的每一天...... k qty_sold = 0,并保留 date = Day_k+1 qty_sold >= 0 的所有行)

任何人都可以就如何解决这个问题提出一个想法吗?实际数据集包含大约一百万行。除了 R 之外,我也欢迎使用 SAS 来完成此任务的建议。

0 投票
2 回答
2389 浏览

r - R中不平衡面板上的简单移动平均线

我正在处理一个不平衡、不规则间隔的横截面时间序列。我的目标是获得“数量”向量的滞后移动平均向量,按“主题”分割。

换句话说,假设为 Subject_1 观察到以下数量:[1,2,3,4,5]。我首先需要将它滞后 1,得到 [NA,1,2,3,4]。

然后我需要取 3 阶的移动平均线,得到 [NA,NA,NA,(3+2+1)/3,(4+3+2)/3]

以上需要对所有科目进行。

如果面板是平衡的,我将首先使用 packageplm和 function滞后“数量”变量lagrollmean然后我会像这样使用包中的函数来获取滞后“数量”的移动平均值zoo

这将在应用于平衡“面板”DF 时产生正确的结果。

问题在于,plm并且lag依赖于均匀分布的系列来生成索引变量,而 rollapply 要求所有主题的观察次数(窗口大小)相等。

StackExchange 上有一个带有 data.table 的解决方案,它暗示了我的问题的解决方案:Producing a rolling average of an unbalanced panel data set

也许可以修改此解决方案以生成固定长度的移动平均线,而不是“滚动累积平均线”。

0 投票
2 回答
2676 浏览

r - R中多个条件的有效条件求和

我正在努力寻找解决以下问题的有效解决方案:

我有一个大的操纵数据框,大约有 8 列和 80000 行,通常包括多种数据类型。如果满足大型数据框的条件,我想创建一个包含一列总和的新数据框。

想象一下原始数据框的头部是这样的。$years.raw 列表示公司测量了 x 年的数据。

我现在需要做的是创建一个新的数据框,根据某些字符串元素总结每家公司和每年的 $amount.inkg 列的值。我将字符串元素保存在下面的三个向量中。字符串元素是原始数据框中 $source 列的一部分。

首选数据框将如下所示:

$amount.vector1 的一般方法是: 汇总每个公司和每年的 $amount.inkg 列的值,其中原始数据框列 $source== vector1 的字符串元素。列 $amount.vector2 相同,只是元素当然不同。

如果没有可用的值,则应添加“0”而不是 NA 错误。这需要对整个原始数据框架进行,其中包括大约 250 家公司,每家公司的数据为 1:8(差异很大)。

编辑:对于数据框,我需要每年每公司一行。

我试图编写一个结合这些条件的函数,但我失败了。我对 R 很陌生,不知道如何链接这些条件并将它们应用于整个数据框。

0 投票
1 回答
3032 浏览

r - 在 `dplyr` 输出中添加行

在传统plyr中,返回的行会自动添加到输出中,即使它们超过了该分组的输入行数:

我无法弄清楚如何在dplyr. 一些尝试:

我该怎么做呢?

我要反对的特定用例是拆分 - 分隔的\n文本字段并使其“长”,但我一直将此功能ddply用于许多目的。

0 投票
3 回答
655 浏览

r - 基于R中的两个因素未拆分的缩减数据表

假设我在 R 中有一个数据框,我想使用 2 列“factor1”和“factor2”作为因子,并且我需要计算每对上述因子的所有其他列的平均值。运行下面的代码后,最后一行给出以下警告:

...

为什么会发生这种情况,我应该怎么做才能使它正确?谢谢。

这是我的代码:

EDIT1:添加数据框创建(见上文)

0 投票
1 回答
137 浏览

java - Java ArrayList 将当前项目添加到上一个项目;删除当前项目

代码的目的是遍历 ArrayList> listOfLists 中的每个项目并将前一个列表组合到当前列表,对当前列表进行排序并删除下一个列表(因为已经组合)。这需要发生,直到只剩下一个列表。有了它,我可以将 ArrayList.get(0) 的内容吐出到文件中。

listOfLists 是在代码片段之前定义的。我正在努力解决的是:如何将 alStr1 内容发送回 listOfLists.get(0)?

非常感谢您提供的任何建议。谢谢

这将解释我想要实现的目标。请原谅我没有先添加这个。

0 投票
3 回答
1115 浏览

c++ - 如何加速这个 Rcpp 功能?

我希望实现一个简单的split-apply-combine例程,Rcpp其中将数据集(矩阵)分成组,然后返回分组列的总和。这是一个在 中很容易实现的过程R,但通常需要相当长的时间。我已经设法实现了一个Rcpp性能优于 的解决方案R,但我想知道我是否可以进一步改进它。为了说明,这里有一些代码,先供使用R

事实证明,for-loops 实际上非常快,并且是最容易(对我来说)实现的Rcpp. 它的工作原理是为每个组创建一个子矩阵,然后调用colSums该矩阵。这是使用实现的RcppArmadillo

但是,根据对这个问题的回答,我了解到创建副本的成本很高C++(就像在 中一样R),但循环并不像在 中那样糟糕R。由于- 解决arma方案依赖于submat为每个组创建矩阵(在代码中),我的猜测是避免这种情况会进一步加快进程。因此,这里是基于Rcpp仅使用循环的第二个实现:

对这些解决方案进行基准测试,包括use_dt@Roland 提供的版本(我以前的版本不公平地歧视data.table),以及dplyr@beginneR 建议的解决方案,产生以下结果:

我的直觉(use_Rcpp优于use_arma)结果并不正确。话虽如此,我猜if (G(i) != g_id) continue;use_Rcpp函数中的行会减慢一切。我很高兴了解设置它的替代方法。

我很高兴我用一半的时间完成了同样的任务R,但也许这几个Rcpp is much faster than R例子已经超出了我的期望,我想知道我是否可以加快速度。有人有想法吗?我也欢迎任何一般的编程/编码评论,因为我对RcppC++.

0 投票
3 回答
2631 浏览

python - Pandas 多索引数据框将列中的第一行设置为 0

我在处理 pandas 中的分组对象时遇到了一些麻烦。具体来说,我希望能够将列中的第一行设置为 0,同时保持其他行不变。

例如:

给我

我将它们按 A 分组并按 B 排序:

得到这个:

现在我有了组,我希望能够将每个组中的第一个元素设置为 0。我该怎么做?

像这样的东西会起作用,但我想要一种更优化的方法:

任何帮助将不胜感激,谢谢!