2017-02-21 19 views
0

Rのデータフレームから値を検索して検索する方法について質問があります。データフレームにはさまざまな列のデータフレームがあり、データにセクションがあるとしましょうフレームのような:今データフレーム内の最も近い値を検索する

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

、のも、私は与えられた値/文字列を持って、そのインスタンスのために言ってみましょうとして:

時間:10時32分40秒

マイクロ秒:421

基本的には、Rに(またはdata.tableパッケージの)関数やメソッドがあるかどうか、時間とマイクロ秒の情報を使ってデータフレームを検索し、最も近い「低い」値または時間とマイクロ秒の値に等しい値)。例えば、私が与えたTime:10:32:40とMicrosecond:421の情報では、データフレームの最も近い低い値はTime:10:32:40とMicrosecond:420です。

また、私は(上の例のデータフレームの場合)は、Time:10:32:40およびMicrosecond:422になります。

最後に、データフレーム内で最も近い「上位」値(または値は等しい)私は、私が持っている情報に最も近い下限/上限値または(等しい値)を見つけたいと思います。私が意味することは、「値に等しい」とは、データフレームに、私が持っている情報(すなわち、時間:10:32:40およびマイクロ秒:421)と正確に等しい行があった場合、それを使用したいと思います「最も近い」値を使用するのではなく、データフレーム内の行情報が、私が持っている情報とまったく同じであれば、それは「最も近い」値と比較して私にとってより高い優先順位を持っています。

「時間」列の値を切り上げる必要があるため、「マイクロ秒」列に加えて「時間」列に最も近い値を見つけることができるようにしたい。

これを行う機能や方法はありますか?私が言ったことがはっきりしないなら、私に知らせてください。

+0

'data.table's 'rolling join'または 'non-equi joins'のStackoverflowについてここで検索してください - あなたの役に立つかもしれないと思います。例えば。 - http://stackoverflow.com/questions/32634923/data-table-rolling-join-within-range – thelatemail

+0

ありがとう、私は今それをチェックします! – ThePlowKing

答えて

0

私はそれを処理するための最良の方法は、次にあなたが昇順にマイクロ秒続く昇順、に関連するすべての時間を持つことになります

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

を重複しない行のみを維持することだと思います。順序が整うと、3つの連続した行を取り出すことで、最も近い時刻とそれよりも近い時刻を選択することができます(最初に行が重複しているかどうかを調べる)。

dupes<- your_df[duplicated(your_df),] 

複製された行の最初のインスタンスは含まれませんが、次のすべての複製が含まれます。

リスト全体が必要な場合は、順序を逆にしてもう一度実行し、もう一方を減算して最初のものに差を追加することができます。

+0

返信いただきありがとうございます!現在のところ、データフレームは既に昇順になっていますが、私はもともと述べたメソッドを使用しました(私の情報に一致するデータフレームの正確な行を見つけるために関数which()を使いました)。私が現時点で持っている問題は、私が持っている情報の中には、それにマッチするデータフレームの行がないため、最も近い値/文字列を見つけることができる関数またはメソッドを見つけようとしています。私の情報と一致するデータフレーム – ThePlowKing

+0

あなたが重要視しているフィールドのすべてを並べ替えると、次にマイクロ秒、次の最も近い時刻が右上と右下に表示されます。 – sconfluentus

+0

残念ながら私はたとえそれらが複製されているように見えても、すべての行が表示されます。これはちょっと変わった問題ですが、データフレームに情報が「すべて」含まれていないことや、実際にはナノ秒の列であることが必要であるため、完全に正確にする必要があります。ナノ秒私は問題が発生していないだろう:( – ThePlowKing

関連する問題