您好我使用R来分析我的数据。我有以下格式的时间序列数据:
dates ID
2008-02-12 3
2008-03-12 3
2008-05-12 3
2008-09-12 3
2008-02-12 8
2008-04-12 6
我想创建一个图表,其中x轴为日期,Y轴为ID
。如果为该数据报告了id,那么它就会得出一个点,如果没有数据,那么它就没有了。
在原始数据集中,如果在该日期报告值,则我只有id。对于例如对于id为6的2008-02-12,没有报告数据,因此我的数据集中缺少数据。
我能够获得具有唯一(df$dates
)函数的所有日期,但是对于如何循环数据并使用10为所有ID制作矩阵的R数据结构不够了解,然后绘制它。
如果你们能帮我解决这些问题,或者给我一些关于解决这个问题的有效方法的指示,我将不胜感激。
提前致谢。
答案 0 :(得分:1)
看起来你想要像散点图一样:
# input data
DF <-
read.csv(
text=
'Year,ID
2008-02-12,3
2008-03-12,3
2008-05-12,3
2008-09-12,3
2008-02-12,8
2008-04-12,6',
colClasses=c('character','integer'))
# convert first column from characters to dates
DF$Year <- as.POSIXct(DF$Year,format='%Y-%m-%d',tz='GMT')
# scatter plot
plot(x=DF$Year,y=DF$ID,type='p',xlab='Date',ylab='ID',
main='Reported Values',pch=19,col='red')
结果:
但这种方法存在问题。例如,如果您有unique(ids) = c(1,2,1000)
,则id=2
和id=1000
之间的y轴上的空间将非常大(x轴上的日期也相同)。
也许您想要一种“地图”ID日期,如下所示:
# input data
DF <-
read.csv(
text=
'Year,ID
2008-02-12,3
2008-03-12,3
2008-05-12,3
2008-09-12,3
2008-02-12,8
2008-04-12,6',
colClasses=c('character','integer'))
dates <- as.factor(DF$Year)
ids <- as.factor(DF$ID)
plot(x=as.integer(dates),y=as.integer(ids),type="p",
xlim=c(0.5,length(levels(dates))+0.5),
ylim=c(0.5,length(levels(ids))+0.5),
xaxs="i", yaxs="i",
xaxt="n",yaxt="n",main="Reported Values",
xlab="Date",ylab="ID",pch=19,col='red')
axis(1,at=1:length(levels(dates)),labels=levels(dates))
axis(2,at=1:length(levels(ids)),labels=levels(ids))
# add grid
abline(v=(1:(length(levels(dates))-1))+0.5,,col="Gray80",lty=2)
abline(h=(1:(length(levels(ids))-1))+0.5,col="Gray80",lty=2)
结果: