2017-02-21 11 views
0

У меня есть вопрос о поиске и поиске значений из кадров данных в R. Предположим, что у меня есть кадр данных с целым рядом разных столбцов и что есть раздел в данных рамки, такие как:Поиск самых близких значений в кадре данных

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

Теперь, давайте также сказать, например, что у меня есть значения/строки в виде:

Время: 10:32:40

микросекундным: 421

В принципе, мне было интересно, есть ли функция или метод в R (или в пакете data.table), что позволило бы мне использовать информацию Time и Microsecond для поиска в кадре данных, чтобы он находил ближайшее «меньшее» значение (или значение, равное) значениям времени и микросекунды. Например, для Time: 10:32:40 и Microsecond: 421 информация, которую я дал, ближайшим более низким значением в кадре данных будет Time: 10:32:40 и Microsecond: 420.

Кроме того, я хотел бы найти самое близкое «верхнее» значение (или значение, равное) в кадре данных, которое (для примера приведенного выше кадра данных) было бы Time: 10:32:40 и Microsecond: 422.

Наконец, Я хотел бы найти ближайшее нижнее/верхнее значение или (значение, равное) информации, которую я имею. То, что я подразумеваю под «значением, равным», является то, что если бы в кадре данных была строка, которая была точно равна информации, которую я имею (т.е. Time: 10:32:40 и Microsecond: 421), то я хотел бы использовать это вместо того, чтобы использовать «самые близкие» значения, чтобы выразить это прямо, если информация о строках в кадре данных точно такая же, как и информация, которая у меня есть, которая имеет более высокий приоритет для меня по сравнению с «ближайшими» значениями.

Следует также отметить, что я хочу, чтобы в ближайшем столбце «Время» можно было найти самые близкие значения в столбце «Микросекунда», так как мне может потребоваться округлить значения в столбце «Время» ,

Есть функция или способ, которые могут это сделать? Если то, что я сказал, не ясно, пожалуйста, дайте мне знать.

+0

Выполните поиск здесь, в Stackoverflow для 'data.table' 'roll join' или 'non-equi joins' - я думаю, что это может быть полезно для вас. Например. - 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) 

Тогда вы будете иметь все связанные с ним раз в порядке возрастания, а затем по микросекунд в возрастающем порядке. Как только это будет сделано, вы можете выбрать более высокое и более низкое время, просто взяв три последовательные строки (сначала проверяя, повторяются ли какие-либо строки).

dupes<- your_df[duplicated(your_df),] 

Он не включает в себя первый экземпляр дублированного строки, но все последующие дубликаты него включены.

Если вам нужен весь список, вы можете изменить порядок и запустить его во второй раз, а затем вычесть одно из другого и добавить разницу в первую.

+0

Спасибо за ответ! В настоящее время кадр данных уже находится в порядке возрастания, и я изначально использовал упомянутый метод (я использовал функцию which() для поиска точных строк в фрейме данных, которые соответствовали моей информации).Проблема, с которой я сталкиваюсь в данный момент, заключается в том, что для некоторой информации у меня нет строк в кадре данных, которые соответствуют ему, поэтому я пытаюсь найти функцию или метод, способный находить самые близкие значения/строки в кадр данных, который соответствует моей информации – ThePlowKing

+0

Если вы отсортируете по всем полям, которые вы ищете, в порядке важности, то время, которое вы видите в микросекундах, ваши ближайшие ближайшие времена должны быть прямо вверху и внизу внизу ... – sconfluentus

+0

К сожалению, я должен поддерживать все строки, даже если они выглядят так, как будто они дублируются. Это немного странная проблема, но это связано с тем, что в кадре данных не содержится «всей» информации и что на самом деле она должна быть наносекундной колонкой, а также сделать вещи абсолютно точными - если бы существовала наносекунда столбец, тогда у меня не возникло бы проблем :( – ThePlowKing

 Смежные вопросы

  • Нет связанных вопросов^_^