我有一个大型数据集......包含63年数据的60k记录。
我需要在63年的时间段内生成每天平均事件数量的图表,从而生成如下数据框:
Date Frequency
DDMM 5.2
第一个问题 - 如何将日期DD / MM / YYYY转换为DD / MM以允许分组
第二:在数据集的时间跨度内,最好在当天产生平均值的函数。
我看过聚合和积累,但由于我无法通过DDMM和平均值进行分组而失败了。
更新
esums <- with(TorData,
tapply(Count,
format( as.Date(Date, "%d/%m/%Y"), "%d/%m"),
sum, na.rm=TRUE) )
Data<-esums/63
结果如下:
01/01 01/02 01/03 01/04 01/05 01/06 01/07 01/08
0.4444444 0.6190476 2.1428571 1.8095238 4.9365079 5.4920635 4.0000000 1.7301587
01/09 01/10 01/11 01/12 02/01 02/02 02/03 02/04
1.4444444 1.1904762 0.9206349 0.4126984 0.8412698 0.7936508 2.3015873 4.9206349
02/05 02/06 02/07 02/08 02/09 02/10 02/11 02/12
4.7936508 6.4920635 3.8888889 2.0317460 1.5714286 0.7936508 0.4603175 1.0634921
转换为Dataframe
Data<-as.data.frame(Data)
数据现在在一个数组上,需要转换为数据框吗?
Data
01/01 0.4444444
01/02 0.6190476
01/03 2.1428571
01/04 1.8095238
01/05 4.9365079
01/06 5.4920635
01/07 4.0000000
01/08 1.7301587
01/09 1.4444444
01/10 1.1904762
01/11 0.9206349
01/12 0.4126984
我对线图的要求是2列,一列是Date,另一列是Mean,Date似乎丢失了数据类型?
答案 0 :(得分:1)
尝试这样的事情(在没有可重现的例子的情况下未经测试):
esums <- with(my_dataframe,
tapply(event_count,
format( as.Date(my_dates, "%d/%m/%Y"), "%d/%m"),
sum, na.rm=TRUE) )
enums <- with(my_dataframe,
tapply(event_count[!is.na(event_count)],
format( as.Date(my_dates, "%d/%m/%Y"), "%d/%m"),
sum, na.rm=TRUE) )
mean_by_day_of_year <- esums/enums
您创建的数据框具有因子值(因为没有年份,它们不是真正的日期,并且没有日期数据类型,as.data.frame
将d / m转换为rownames。)您可以使用序列索引作为x值绘制线图,设置xaxt =&#34; n&#34;,然后使用axis(1, ...)
绘制信息标签。
dat <- read.table(text= "Data
01/01 0.4444444
01/02 0.6190476
01/03 2.1428571
01/04 1.8095238
01/05 4.9365079
01/06 5.4920635
01/07 4.0000000
01/08 1.7301587
01/09 1.4444444
01/10 1.1904762
01/11 0.9206349
01/12 0.4126984", header=TRUE)
plot(dat$Data, xaxt="n")
axis(1, at=1:nrow(dat), labels=rownames(dat), las=2)
png(); plot(dat$Data, xaxt="n")
axis(1, at=1:nrow(dat), labels=rownames(dat), las=2)
dev.off()