【发布时间】:2016-11-07 12:51:26
【问题描述】:
问题:
在数据框中,我想创建一个新列作为现有列的下一个较小值的索引。
例如,数据如下所示。已经安排在item, day。
item day val
1 1 2 3
2 1 4 2
3 1 5 1
4 2 1 1
5 2 3 2
6 2 5 3
首先我想在dplyr 中使用group_by(item) 来选择每个项目的子数据框。
然后对于第 1 行,我向下看这些行并发现第 2 行有一个较小的val。这就是我想要的,所以我记录了该行对应的day。第 2 行类似。
请注意,对于第 3 行和第 6 行,它们是相应子数据帧的最后一行,因此没有下一个较小的值。对于第 4 行和第 5 行,当我向下看这些行时,没有更小的 val。
带有新列的数据框应如下所示。
item day val next.smaller.day
1 1 2 3 4
2 1 4 2 5
3 1 5 1 -1
4 2 1 1 -1
5 2 3 2 -1
6 2 5 3 -1
我想知道是否有任何方法可以使用dplyr 来实现这一点,或者r 中的任何代码,而不是 for 循环。
我发现一个线程询问这个问题的算法。 Given an array, find out the next smaller element for each element 。 这是相关的,并且所提出的算法在时间复杂度方面超过了我,但我仍然发现在我的场景中很难实现。
谢谢!
更新:
这是另一个重新说明我正在寻找的示例。
item day val next.smaller.day
1 1 2 2 5
2 1 4 3 5
3 1 5 1 -1
4 2 1 3 3
5 2 3 1 -1
6 2 5 2 -1
【问题讨论】: