2015-05-13 87 views
-3

我有一个数据框,其中包含一个连续日期时间列(A列)的小时和几个参数列(例如列B到Z)与测量值。R中两个给定时间之间的数据值差异

我的问题是,如果我想计算B列中某个参数在特定时间段内的差异,例如早上6点 - 前一天下午8点,应该如何编写代码?

使用一些随机数的例子的测试数据:

hour <- seq(as.POSIXct("2014/01/01 00:00:00",tz="EST"), as.POSIXct("2014/3/31 23:00:00",tz="EST"), by="hour") 
PM <- runif(2160, 0, 50) 
NO <- runif (2160, 0, 200) 
test <- data.frame(hour,PM,NO) 

我如何计算PM 06:00之间在第二天和前一天在每一个夜晚的区别下午8点?因此,实际上并不是在同一天计算差异,而是在第2天(早上6点)和第1天(晚上8点)之间进行计算。

+3

请提供一个[最小可重现的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example),包括一个样本数据集和您尝试的任何代码。 –

回答

0

您在寻找哪种系统的解决方案?

在T-SQL的情况下,它可能是这样的:

SELECT MAX(ColumnB)-MIN(ColumnB) AS Column_B_Diff 
FROM Data_table 
WHERE Date >= '2011/02/25 20:00:00.000' and Date <= '2011/02/26 06:00:00.000' 

这不是语法测试,但可能你指出正确的方向。

+0

他正在寻找'r'解决方案(该问题有其标签)。但是,您的解决方案可能也适用于正确的软件包。 –

+0

大卫,感谢您的纠正并解释 –

0

由于时间不够,有些笨拙的解决方案。如果你相信,每天将在上午6点和晚上8点的条目,您可以使用子集:

hour <- seq(as.POSIXct("2014/01/01 00:00:00",tz="EST"), as.POSIXct("2014/3/31 23:00:00",tz="EST"), by="hour") 
PM <- runif(2160, 0, 50) 
NO <- runif (2160, 0, 200) 
test <- data.frame(hour,PM,NO) 
test6 = subset(test,grepl("06:00:00",test$hour) == T) 
test8 = subset(test,grepl("20:00:00",test$hour) == T) 
diffPM = test8$PM - test6$PM 

当然,也有很多更好的解决方案,检查PM的差异属于同一天,但作为一开始你可能会使用该工作

+0

感谢您的回答。是的,你提出了一个好点。有些日子,我确实在两次或两次都缺少数据。另外,您的方法是在同一天计算差异,但我想计算第2天早上6点到第1天晚上8点的PM差异,实际上是晚上的开始时间和结束时间。 – Vicki1227

+0

啊!那么解决方案将无法工作。刚刚看到编辑 –

+0

定义缺失数据 - 在PM和NO中没有完整的行,比如说06:00:00或者“NA”? –