2017-02-20 15 views
1

Первый df содержит значения температурных измерений, проводимых каждые 30 минут в течение двух месяцев датчиками в разных местах. Выглядит примерно так:Подмножество данных с помощью значений datetime (POSIXlt) с использованием значений datetime (POSIXtl) из другого фрейма данных в R

 date_time   id  Temp 
2012-02-27 00:11:00 | Sens_1 | 23.0 
2012-02-27 00:11:30 | Sens_1 | 23.4 
2012-02-27 00:12:00 | Sens_1 | 24.6 
2012-02-27 00:12:30 | Sens_1 | 25.2 
2012-02-27 00:13:00 | Sens_1 | 25.5 
2012-02-27 00:13:30 | Sens_1 | 26.3 
      :    :   : 
2012-02-27 00:11:00 | Sens_2 | 34.6 
2012-02-27 00:11:30 | Sens_2 | 33.4 
2012-02-27 00:12:00 | Sens_2 | 34.6 
2012-02-27 00:12:30 | Sens_2 | 35.4 
2012-02-27 00:13:00 | Sens_2 | 36.5 
2012-02-27 00:13:30 | Sens_2 | 38.8 
      :     :   : 
2012-02-27 00:11:00 | Sens_3 | 14.6 
2012-02-27 00:11:30 | Sens_3 | 14.4 
2012-02-27 00:12:00 | Sens_3 | 13.6 
2012-02-27 00:12:30 | Sens_3 | 15.4 
2012-02-27 00:13:00 | Sens_3 | 15.5 
2012-02-27 00:13:30 | Sens_3 | 16.8 
      :     :   : 

Второй DF имеет только один столбец со значениями даты и времени, которые были отфильтрованы ранее в связи с другими ограничениями и поэтому имеют только часть значений даты и времени. Например:

date_time   
2012-02-27 00:11:00 
2012-02-27 00:12:00 
2012-02-27 00:12:30 
2012-02-27 00:13:30 
      :  

То, что я хочу, чтобы получить что-то вроде этого:

date_time   id  Temp 
2012-02-27 00:11:00 | Sens_1 | 23.0 
2012-02-27 00:12:00 | Sens_1 | 24.6 
2012-02-27 00:12:30 | Sens_1 | 25.2 
2012-02-27 00:13:30 | Sens_1 | 26.3 
      :    :   : 
2012-02-27 00:11:00 | Sens_2 | 34.6 
2012-02-27 00:12:00 | Sens_2 | 34.6 
2012-02-27 00:12:30 | Sens_2 | 35.4 
2012-02-27 00:13:30 | Sens_2 | 38.8 
      :     :   : 
2012-02-27 00:11:00 | Sens_3 | 14.6 
2012-02-27 00:12:00 | Sens_3 | 13.6 
2012-02-27 00:12:30 | Sens_3 | 15.4 
2012-02-27 00:13:30 | Sens_3 | 16.8 
      :     :   : 

Заранее спасибо за любую помощь.

+2

'merge (df1, df2)' – Gregor

+0

'do.call (rbind, lapply (split (df1, df1 $ id), function (x) x [x $ date_time% in% df2 $ date_time,]))' –

+0

Спасибо за ваши быстрые ответы db отвечает хорошо работает @Gregor: 'merge' не работает и выбрасывает эту ошибку: Ошибка в sort.list (bx [m $ xi]): 'x' должен быть атомарным для ' sort.list ' Вы назвали' sort 'в списке? Это должно произойти, когда данные не являются data.frame, а списком. Я попробовал 'str' в обоих df и сказал следующее: 'str (sens) ' data.frame ': \t 3342 obs. из 3 var $ id: chr "Sens_1" .. $ fechahora: POSIXlt, формат: "2014-01-01 00:00:00" .. $ valor: num 22.3 .. ' – NewUser

ответ

2

Один из способов сделать это - правое соединение. Вы можете использовать dplyr:

library(dplyr) 
df1 %>% right_join(df2) 

Вот некоторые useful documentation.

+0

Спасибо за ответ, но у меня есть ошибка , Присоединение по: "DateTime" Ошибка: не может присоединиться на 'DateTime' Столбцы х 'DateTime': Невозможно объединение 'DateTime' х 'DateTime' из-за несовместимых типов (POSIXlt, POSIXt/POSIXlt, POSIXt) – NewUser

+0

Это ошибка говорит о том, что два столбца date_time не одного типа. Если бы они были, соединение будет работать. Кроме того, для соединения для работы 'date_time' следует хранить как POSIXct в обоих кадрах данных. – neilfws

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

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