如何在R - 时间序列中生成报告值和缺失值的图

时间:2014-09-11 17:46:22

标签: r plot

您好我使用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数据结构不够了解,然后绘制它。

如果你们能帮我解决这些问题,或者给我一些关于解决这个问题的有效方法的指示,我将不胜感激。

提前致谢。

1 个答案:

答案 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') 

结果:

enter image description here

但这种方法存在问题。例如,如果您有unique(ids) = c(1,2,1000),则id=2id=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)

结果:

enter image description here