Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
绘制缺少日期范围的时间序列R_R_Date_Time Series - Fatal编程技术网

绘制缺少日期范围的时间序列R

绘制缺少日期范围的时间序列R,r,date,time-series,R,Date,Time Series,可能很琐碎,但对我来说很难把它做好 给定A中的开始和结束日期,以及日期范围之间的持续时间(以月为单位): A= structure(list(start..yyyy.mm. = c(197901L, 197901L, 197901L, 197901L, 197901L), X.yyyy.mm. = c(197901L, 197904L, 197908L, 197902L, 197902L), duration = c(1L, 4L, 8L, 2L, 2L), area..km

可能很琐碎,但对我来说很难把它做好

给定
A
中的
开始
结束
日期,以及日期范围之间的
持续时间(以月为单位):

A=
structure(list(start..yyyy.mm. = c(197901L, 197901L, 197901L, 
    197901L, 197901L), X.yyyy.mm. = c(197901L, 197904L, 197908L, 
    197902L, 197902L), duration = c(1L, 4L, 8L, 2L, 2L), area..km.2. = structure(c(1L, 
    2L, 4L, 3L, 5L), .Label = c("46952.85", "c(125267.7, 72379.43, 72468.91, 13200.26)", 
    "c(19814.74, 39570.96)", "c(26513.05, 26513.05, 26513.05, 26513.05, 26513.05, 19898.57, 26513.05, 26513.05)", 
    "c(52291.77, 52291.77)"), class = "factor")), .Names = c("start..yyyy.mm.", 
    "X.yyyy.mm.", "duration", "area..km.2."), class = "data.frame", row.names = c(NA, 
    -5L))
我想制作一些类似下图的东西(忽略直方图)。每个
持续时间
的颜色不同。在
A
中,第一个
区域
值对应于日期范围内的
第一个月


如您所见,
A
中的日期不是连续的。因此,我们的目的是创建一个连续的日期轴,例如
ts我不确定您到底想要绘制什么,但这里有一些东西可以实现这一点。奇怪的是,您将区域设置为因子形式,而不是列表列,因为这迫使
分隔行
过滤器
,而不是简单的
最新
。这里的主要内容是为每个组添加一个额外的行,以便duration 1有两个日期值,然后根据这些分组添加正确的日期。这允许我们使用
geom_功能区
geom_区域
绘制重叠日期,无论您选择什么

编辑:如果您仔细查看此方法,它所做的是避免在时间序列中每个月创建行,而只创建有区域可绘制的观察值。如果要扩展x轴的限制,只需调用
scale\u x\u date
并更改限制,但它应自动缩放到数据所在的位置。还更改了输入数据,使其不重叠,并更改了功能区打印以匹配

库(tidyverse)
A%
选择(开始、持续时间、面积=面积..km.2.)%>%
rowid_到_列()%>%
分隔行(面积)%>%
过滤器(!区域%位于%c(“c”和“”)中)
指数%
拆分(组索引(tbl,rowid))%>%
映射(~c(.x,NA))%>%
未列出()
待定%
填充(行ID、开始、持续时间、面积)%>%
分组依据(rowid)%>%
变异(
日期=序号日期(
从=第一个(开始),
by=“month”,
length.out=第一个(持续时间)+1
),
面积=作为数字(面积)
) %>%
解组()
ggplot(待定)+
geom_ribbon(aes(x=日期,填充=因子(rowid),ymax=1,ymin=0))

ggplot(待定)+
geom_区(
映射=aes(x=日期,y=面积,填充=系数(rowid)),
α=0.3,
position=“identity”
) +
刻度日期(限值=c(截止日期(“1979-01-01”),系统日期()


由(v0.2.0)于2018年4月24日创建。

中的月份是否为年-月格式?编辑:对不起,是的,我看到标题了。你能解释一下,
区域..km.2
列的情况吗?我对像“c(125267.772379.43,72468.9113200.26)”这样的级别作为一个字符串感到困惑。你想让它成为一个嵌套的列表列还是什么?@camille:我想你需要使用
分隔行
来对每一行进行分解month@camille在
A
中,第一个
区域
值对应于日期范围等中的第一个月。。例如,在第2行中,
197901的区域为125267.7,197902的区域为72379.43等。感谢您提供这些见解。我想把上面的数据绘制在我添加的图像上。我的实际数据是你说的时间段的时间序列忽略直方图,所以我不知道你到底想画什么。您希望如何处理重叠?你只是想扩大x轴的范围吗?哦!我明白你的意思。你能不能先去掉重叠,然后说明如何像图中那样绘制时间序列?然后,我将讨论重叠问题。非常感谢。
library(dplyr)
data_with_missing_times <- full_join(ts,A)