2017-01-05 11 views
-1

私は2つのデータフレームを持っています。残りの時間を抽出する

df1 

      Tstart    Tend  start_temp 
2012-12-19 21:12:00 2012-12-20 02:48:00 17.7637930350627 
2013-01-31 17:36:00 2013-01-31 22:54:00 18.9618654078963 
2013-02-14 09:12:00 2013-02-14 09:48:00 18.2361739981826 
2013-02-21 15:36:00 2013-02-21 16:36:00 20.9938186870285 
2013-03-21 03:54:00 2013-03-21 05:18:00 16.7130008152092 
2013-03-30 23:42:00 2013-03-31 02:30:00 15.3775459369926 

df2 
      datetime airtemp 
2012-12-11 23:00:00 14.40 
2012-12-11 23:06:00 14.22 
2012-12-11 23:12:00 14.04 
2012-12-11 23:18:00 13.86 
2012-12-11 23:24:00 13.68 
2012-12-11 23:30:00 13.50 
...... 
2015-03-31 23:24:00 15.46 
2015-03-31 23:30:00 15.90 
2015-03-31 23:36:00 15.82 
2015-03-31 23:42:00 15.74 

IはDF1でSTARTTとend​​T間の期間以外(DF2が時系列で)DF2からの残りの日時を抽出します。 どうすればこのことができますか? 多くのありがとうございます。

+0

あなたが '' data.table'パッケージからfoverlaps'を試みることができます。 – lukeA

答えて

0

ベースRで、私たちは(以下df1 & df2で)次のことを試すことができます。

df1 <- read.csv(text='Tstart, Tend, start_temp 
2012-12-19 21:12:00, 2012-12-20 02:48:00, 17.7637930350627 
2013-01-31 17:36:00, 2013-01-31 22:54:00, 18.9618654078963 
2013-02-14 09:12:00, 2013-02-14 09:48:00, 18.2361739981826 
2013-02-21 15:36:00, 2013-02-21 16:36:00, 20.9938186870285 
2013-03-21 03:54:00, 2013-03-21 05:18:00, 16.7130008152092 
2013-03-30 23:42:00, 2013-03-31 02:30:00, 15.3775459369926', header=TRUE) 

df2 <- read.csv(text='datetime, airtemp 
2012-12-11 23:00:00, 14.40 
2012-12-11 23:06:00, 14.22 
2012-12-11 23:12:00, 14.04 
2012-12-11 23:18:00, 13.86 
2012-12-11 23:24:00, 13.68 
2012-12-19 23:30:00, 13.50 
2013-03-21 04:24:00, 15.46 
2013-03-21 23:30:00, 15.90 
2015-03-31 23:36:00, 15.82 
2015-03-31 23:42:00, 15.74', header=TRUE) 

df1$Tstart <- strptime(as.character(df1$Tstart), '%Y-%m-%d %H:%M:%S') 
df1$Tend <- strptime(as.character(df1$Tend), '%Y-%m-%d %H:%M:%S') 
df2$datetime <- strptime(as.character(df2$datetime), '%Y-%m-%d %H:%M:%S') 

indices <- sapply(1:nrow(df2), function(j) all(sapply(1:nrow(df1), function(i) df2[j,]$datetime < df1[i,]$Tstart | df2[j,]$datetime > df1[i,]$Tend))) 
df2[indices,] 
#    datetime airtemp 
#1 2012-12-11 23:00:00 14.40 
#2 2012-12-11 23:06:00 14.22 
#3 2012-12-11 23:12:00 14.04 
#4 2012-12-11 23:18:00 13.86 
#5 2012-12-11 23:24:00 13.68 
#8 2013-03-21 23:30:00 15.90 
#9 2015-03-31 23:36:00 15.82 
#10 2015-03-31 23:42:00 15.74 
+0

ありがとうございます。残念なことに、コードdf2 $ datetime < - strptime(df2 $ datetime、 '%Y-%m-%d%H:%M:%S')の場合のみ、以下のエラーが発生します。 '[< - 。data.table'(x、j = name、value = value)のエラー: (リスト)オブジェクトを強制的に 'double'と入力することはできません 警告メッセージ: ' [< .data.table'(x、j = name、value = value): 'datetime'列の2つの項目(9未使用)に割り当てられる11個のアイテムを提供します。 – Ushi

+0

あなたはdata.tableを持っていると思います。 ?コードを更新してデータフレームの作成を追加しました。データが同じフォーマットであれば動作するはずです。上記のサンプルコードを最初に試してください。 –

関連する問題