我有一个关于在 R 中搜索值的问题,它实际上有点类似于昨天发布的一个问题(如下所示: Searching a vector/data table backwards in R ),但我认为我的问题有点复杂(并且与我想做什么),而且由于我对 R 很陌生,所以我不太确定如何解决这个问题。
我有一个类似于下面给出的数据框,我希望找到我当前索引值的前一个索引值,其中 Times
列与我当前的时间和 Midquote
不同列没有 NA
值(value)。
Index Times | Midquote
-----------------------------
1 10:30:45.58 | 5.319
2 10:30:45.93 | 5.323
3 10:30:45.104 | 5.325
4 10:30:45.127 | 5.322
5 10:30:45.188 | 5.325
6 10:30:45.188 | NA
7 10:30:45.212 | NA
8 10:30:45.231 | 5.321
9 10:30:45.231 | 5.321
如果我们从数据框的底部开始并将其作为“当前”时间,则会发现它位于索引 9 处,并且具有
Times
10:30:45.231
的值和 Midquote
5.321
的值,那么如果我想找到时间与我当前时间不同的第一个索引,我们看到这是索引7,它的时间为10:30:45.212
(因为索引 8 具有相同的时间)。但我们也看到,在索引 7 处 Midquote
值为 NA
所以我现在必须再次检查数据框。索引 6 再次具有不同的时间(即 10:30:45.188
)但它也有 NA
在 Midquote
中再次值列,因此再次向上移动到索引 5,我们看到 Times
列的时间与我当前的时间不同(即 10:30:45.188
再次)并且 Midquotes
值为 5.325
.因此,由于在索引 5 处,时间是
10:30:45.188
(这与我当前的时间是 10:30:45.231
不同)并且因为 Midquote
索引 5 处的值不是 NA
,我希望获得输出“5”,因为它是满足这两个条件的索引值。我的问题是,有没有好的方法可以做到这一点?如果这是一个简单的问题,我很抱歉,我对 R 很陌生,我对使用数据框知之甚少......
编辑:如果可能的话,我也想最好不要在数据框中添加另一列(如我上面提到的链接的最佳答案中给出的)
最佳答案
处理日期很困难,尤其是小数秒。
如果您可以将时间转换为 double ,则使用起来会更容易。
假设你的“时代”是为了你可以使用它
library(magrittr)
which(df$Times < df[9,1] & !is.na(df$Midquote)) %>% max()
which
给出“索引”的向量,其中“时间”小于 9 并且“中间引用”不是 NA。 %>%
将向量发送到 max()
这给出了最高的值(value)。这很不优雅,但可以完成工作。
关于r - 在 R 中搜索数据框中的两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44897056/