在数据框中搜索最近的值

时间:2017-02-21 02:41:34

标签: r search dataframe

我有一个关于从R中的数据帧中搜索和查找值的问题。让我们说我有一个包含大量不同列的数据框,并且数据框中有一个部分,例如:

Instrument |     Time     |   Microsecond
-------------------------------------------
   ....    |     ....     |     ....
-------------------------------------------
ABC        |   10:32:40   |     420
-------------------------------------------
ABC        |   10:32:40   |     422
-------------------------------------------
   ....    |     ....     |     ....       

现在,让我们也说我的值/字符串为:

时间:10:3​​2:40

Microsecond:421

基本上,我想知道在R(或data.table包)中是否有一个函数或方法允许我使用时间和微秒信息来搜索数据帧,这样它就能找到最近的'更低'值(或值等于)时间和微秒值。例如,对于Time:10:3​​2:40和Microsecond:421我给出的信息,数据框中最接近的较低值是Time:10:3​​2:40和Microsecond:420。

此外,我想找到最近的'鞋帮'数据帧中的值(或值等于),(对于上面的示例数据帧)将是时间:10:3​​2:40和微秒:422。

最后,我想找到最接近的上/下值或(值等于)我所拥有的信息。我的意思是"价值等于"如果数据框中有一行完全等于我所拥有的信息(即时间:10:3​​2:40和Microsecond:421)那么我想使用它而不是使用'最接近& #39;价值 - 直言不讳地说,如果数据框中的行信息与我拥有的信息完全相同,那么与“最接近的”信息相比,我的信息具有更高的优先级。值。

我还应该注意到,我希望能够找到"时间"的最接近的值。专栏除了" Microsecond"列,因为我可能需要在"时间"中舍入/舍入值。列。

是否有可以执行此操作的功能或方法?如果我说的不清楚,请告诉我。

1 个答案:

答案 0 :(得分:0)

我认为处理它的最佳方法是只保留不重复的行

notDupes<- your_df[-duplicated(your_df),] 
arrange(notDupes,Time, Microsecond)

然后,您将按升序排列所有相关时间,然后按升序显示微秒。一旦有序,您可以通过简单地连续三行来选择更高和更低的最近时间(首先测试是否有任何行重复)。

dupes<- your_df[duplicated(your_df),] 

它不包括重复行的第一个实例,但包含所有以下重复项。

如果您想要整个列表,您可以反转订单并再次运行它,然后从另一个中减去一个并将差异添加到第一个。