是否有向量化并行 max() 和 min()?
我有一个带有“a”和“b”列的data.frame
。我想添加名为“high”和“low”的列,其中包含 a 列和 b 列中的最高值和最低值。
有没有一种方法可以在不循环数据帧中的行的情况下执行此操作?
编辑:这是针对 OHLC 数据的,因此高列和低列应包含同一行上 a 和 b 之间的最高和最低元素,而不是整个列中的最高和最低元素。抱歉,如果这措辞不好。
I have a data.frame
with columns "a" and "b". I want to add columns called "high" and "low" that contain the highest and the lowest among columns a and b.
Is there a way of doing this without looping over the lines in the dataframe?
edit: this is for OHLC data, and so the high and low column should contain the highest and lowest element between a and b on the same line, and not among the whole columns. sorry if this is badly worded.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
听起来您正在寻找
pmax
和pmin
(“并行”最大/最小值):Sounds like you're looking for
pmax
andpmin
("parallel" max/min):这是我使用 Rcpp 实现的版本。我将
pmin
与我的版本进行了比较,我的版本大约快了 3 倍。100,000 个元素的
microbenchmark
函数输出为:对于 500,000 个元素:
因此您可以看到
Rcpp
版本更快。您可以通过在函数中添加一些错误检查来使其更好,例如:检查两个向量是否具有相同的长度,或者它们是否具有可比性(不是字符与数字,或布尔与数字)。
Here's a version I implemented using
Rcpp
. I comparedpmin
with my version, and my version is roughly 3 times faster.The
microbenchmark
function output for 100,000 elements is:And for 500,000 elements:
So you can see the
Rcpp
version is faster.You could make it better by adding some error checking in the function, for instance: check that both vectors are the same length, or that they are comparable (not character vs. numeric, or boolean vs. numeric).
如果你的data.frame名称是dat。
If your data.frame name is dat.
另一种可能的解决方案:
Another possible solution: