【发布时间】:2017-06-30 06:11:33
【问题描述】:
我有两个数据集。一种大约每 5 天收集一次,另一种每天每 15 分钟收集一次。我想要一个最终列表,该列表将最接近的日期从不太频繁的数据集与更频繁的数据集中的条目相匹配。
例如:
satDat <- c('2015-04-16', '2015-04-21', '2012-04-26') # collected every 5 days
stationDat <- sort(rep(seq(as.Date("2015-04-01"), as.Date("2015-04-20"), by='day'),2))
#collected multiple times a day
[1] "2015-04-01" "2015-04-01" "2015-04-02" "2015-04-02" "2015-04-03"
[6] "2015-04-03" "2015-04-04" "2015-04-04" "2015-04-05" "2015-04-05"
[11] "2015-04-06" "2015-04-06" "2015-04-07" "2015-04-07" "2015-04-08"
[16] "2015-04-08" "2015-04-09" "2015-04-09" "2015-04-10" "2015-04-10"
[21] "2015-04-11" "2015-04-11" "2015-04-12" "2015-04-12" "2015-04-13"
[26] "2015-04-13" "2015-04-14" "2015-04-14" "2015-04-15" "2015-04-15"
[31] "2015-04-16" "2015-04-16" "2015-04-17" "2015-04-17" "2015-04-18"
[36] "2015-04-18" "2015-04-19" "2015-04-19" "2015-04-20" "2015-04-20"
我希望我的结果看起来像这样
[1] "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16"
[6] "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16"
[11] "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16"
[16] "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16"
[21] "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16"
[26] "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16"
[31] "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16" "2015-04-16"
[36] "2015-04-16" "2015-04-21" "2015-04-21" "2015-04-21" "2015-04-21"
【问题讨论】:
-
这个question的答案有帮助吗?
-
satDat[apply(abs(outer(satDat, stationDat, difftime, units = 'days')), 2, which.min)],虽然我怀疑还有更优雅的选择 -
由于其中一个向量已排序,您可以利用
cut来缩小检查的可能日期,这样@alistaire 的解决方案就不会那么具有爆炸性。 (当然,这会是更多的代码,但如果您的数据足够大,这将非常有用。) -
@alistaire 我喜欢你的解决方案,但是,一旦你将 stationDat 更改为更长的时间序列,比如 stationDat
-
2015-04-26 不在
satDat;它有 2012-04-26,这将远非一切......错字?无论如何,outer将两个向量的每个组合与提供的函数(此处为difftime)进行比较,并返回一个矩阵,abs在该矩阵上丢弃负数。apply遍历列(边距 2)并应用which.min,它返回最小的索引,用于子集satDat。如果是错字,我可以将其添加为带有完整解释的答案,因为似乎没有其他选择。