提取剩余的时间段

时间:2017-01-05 00:22:53

标签: r

我有两个数据框。

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

我想从df2中提取剩余的日期时间(df2是时间序列),而不是df1中startT和endT之间的句点。 你能帮我做一下吗? 非常感谢。

1 个答案:

答案 0 :(得分: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