我有一个跨越几个月的数据框,每天分成几个值。我已将一列指定为日期(使用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,但没有成功:(
答案 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.daily
,apply.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.Date
或seq.Date
来定义数据范围,并再次使用这些作为因素折叠到您感兴趣的群组中。