我有几个数据文件,如下所示:
X code year month day pp
1 4515 1953 6 1 0
2 4515 1953 6 2 0
3 4515 1953 6 3 0
4 4515 1953 6 4 0
5 4515 1953 6 5 3.5
有时会丢失数据,但我没有NA,行根本就不存在 . 我需要在数据丢失时创建NA . 我虽然可以通过将它转换为动物园对象来确定何时发生,并检查严格的规律性(我之前从未使用过动物园),但我使用以下代码:
z.date<-paste(CET$year, CET$month, CET$day, sep="/")
z <- read.zoo(CET, order.by= z.date )
reg<-is.regular(z, strict = TRUE)
但答案总是如此!
谁能告诉我为什么不工作?或者甚至更好,告诉我一种在数据丢失时创建NA的方法(有或没有动物园包)?
谢谢
4 回答
首先要注意的是
z.date
是字符,而不是日期 .以下是使用xts(动物园的子类)解决问题的方法 .
我不得不用月度时间序列处理类似的问题 . 我通过时间变量直接加入两个
data.table
/data.frame
来做到这一点 . 我的观点是时间序列也是一种数据集 . 因此,您还可以以常规方式将任何时间序列作为常规数据集进行操作 . 这是我的解决方案:在此之后,您可以轻松地将数据集的类更改回您想要的任何类型的时间序列 . 我更喜欢
read.zoo
.seq
函数有一些有趣的功能,您可以使用它们轻松生成完整的日期序列 . 例如,以下代码可用于生成从4月25日开始的日期序列:Edit: 此功能记录在
?seq.Date
中现在使用相同的原理生成一些带有“缺失”行的数据,方法是每隔第二天生成一个序列:
要回答您的问题,可以使用向量下标或
match
函数来创建具有NA的数据集:要将此结果与原始完整数据相结合:
在动物园包中"regular"意味着该系列是等距的,除了可能有一些缺失的条目 . zoo包中的
zooreg
类专门用于该类型的系列 . 请注意,所有常规系列的集合包括所有等间距系列的集合,但严格地说更大 .is.regular
函数检查给定系列是否是常规的 . 也就是说,如果为缺失的条目插入NA,该系列是否可以使其间隔相等?关于你的上一个问题,它是一个FAQ . 请参阅动物园常见问题解答#13,可从zoo CRAN page或R内通过:
在FAQ#13中还有一些说明性代码 .