根据日期分析数据

时间:2014-05-08 16:46:19

标签: r xts

我有一个跨越几个月的数据框,每天分成几个值。我已将一列指定为日期(使用as.Date()),但是是否可以针对特定日期对数据运行操作?

例如,我想在29-04-14运行summary()并仅返回此特定日期的摘要。

         Date     Time   col3   col4
6084 28-04-14 23:42:30   0.48 164.00
6085 28-04-14 23:47:00   0.39 150.00
6086 28-04-14 23:51:30   0.41 164.00
6087 28-04-14 23:56:00   0.33 160.00
6088 29-04-14 00:00:00   0.32 138.00
6089 29-04-14 00:04:30   0.15 141.00
6090 29-04-14 00:09:00   0.12 133.00

我已经尝试了几个小时并安装了xts,但没有成功:(

2 个答案:

答案 0 :(得分:2)

这可以帮助您开始使用“xts”软件包。

从一些示例数据开始,作为data.frame

mydf <- structure(list(Date = c("28-04-14", "28-04-14", "28-04-14", "28-04-14",
                                "29-04-14", "29-04-14", "29-04-14"), 
                       Time = c("23:42:30", "23:47:00", "23:51:30", "23:56:00", 
                                "00:00:00", "00:04:30", "00:09:00"), 
                       col3 = c(0.48, 0.39, 0.41, 0.33, 0.32, 0.15, 0.12), 
                       col4 = c(164, 150, 164, 160, 138, 141, 133)), 
                  .Names = c("Date", "Time", "col3", "col4"), 
                  class = "data.frame", row.names = c(NA, -7L))

将其转换为“xts”对象:

library(xts)
myxts <- xts(mydf[-c(1, 2)], 
             as.POSIXct(paste(as.Date(mydf$Date, format="%d-%m-%y"), 
                              mydf$Time), tz=""))

现在看起来像这样:

myxts
#                     col3 col4
# 2014-04-28 23:42:30 0.48  164
# 2014-04-28 23:47:00 0.39  150
# 2014-04-28 23:51:30 0.41  164
# 2014-04-28 23:56:00 0.33  160
# 2014-04-29 00:00:00 0.32  138
# 2014-04-29 00:04:30 0.15  141
# 2014-04-29 00:09:00 0.12  133

“xts”包有许多方便的基于时间的功能,例如apply.dailyapply.weekly等。

apply.daily(myxts, mean)
#                          col3     col4
# 2014-04-28 23:56:00 0.4025000 159.5000
# 2014-04-29 00:09:00 0.1966667 137.3333

它还可以方便地提取特定日期或时间段:

myxts["2014-04-29"]
#                     col3 col4
# 2014-04-29 00:00:00 0.32  138
# 2014-04-29 00:04:30 0.15  141
# 2014-04-29 00:09:00 0.12  133

这是特定日期summary的样子:

summary(myxts["2014-04-29"])
#      Index                          col3             col4      
#  Min.   :2014-04-29 00:00:00   Min.   :0.1200   Min.   :133.0  
#  1st Qu.:2014-04-29 00:02:15   1st Qu.:0.1350   1st Qu.:135.5  
#  Median :2014-04-29 00:04:30   Median :0.1500   Median :138.0  
#  Mean   :2014-04-29 00:04:30   Mean   :0.1967   Mean   :137.3  
#  3rd Qu.:2014-04-29 00:06:45   3rd Qu.:0.2350   3rd Qu.:139.5  
#  Max.   :2014-04-29 00:09:00   Max.   :0.3200   Max.   :141.0

答案 1 :(得分:0)

您可以像大多数其他因素一样对待您的日期。如果您希望为每个日期运行summary,则可以使用标准by函数

by(data, data$Date, summary)

日期范围有点棘手。我可能会建议您使用cut.Dateseq.Date来定义数据范围,并再次使用这些作为因素折叠到您感兴趣的群组中。