【发布时间】:2020-08-31 22:27:29
【问题描述】:
我是新来的,所以... 我有一个带有两个变量的数据框(R 对我来说是新的,我使用 Matlab 很长时间)。一个是经典的 POSIXlt,每个数据点之间的时间戳为 30 分钟。第二个是数据本身(例如,气温数据)和与时间向量相同的维度。我用这对来获得漂亮的情节。 我想以这种方式使用时间重塑数据:我想使用行方向的天数和列中的时间(最多 48 列,使用 0:00 到 23:30 之间的 30 分钟间隔)对数据进行排序-direction,在另一个 R 包中使用此数据来填充缺失的数据。
>> head(data_f, 10)
time data
1 2013-08-01 00:30:00 8.001
2 2013-08-01 01:00:00 7.918
3 2013-08-01 01:30:00 7.621
4 2013-08-01 02:00:00 7.564
5 2013-08-01 02:30:00 7.718
6 2013-08-01 03:00:00 7.846
7 2013-08-01 03:30:00 7.481
8 2013-08-01 04:00:00 7.351
9 2013-08-01 04:30:00 7.275
10 2013-08-01 05:00:00 7.291
更多数据
48 2013-08-02 00:00:00 9.372
49 2013-08-02 00:30:00 9.485
50 2013-08-02 01:00:00 9.151
51 2013-08-02 01:30:00 8.870
52 2013-08-02 02:00:00 8.504
53 2013-08-02 02:30:00 8.404
54 2013-08-02 03:00:00 8.342
55 2013-08-02 03:30:00 8.278
56 2013-08-02 04:00:00 8.229
57 2013-08-02 04:30:00 8.163
58 2013-08-02 05:00:00 8.092
59 2013-08-02 05:30:00 8.038
我想要一个理想的矩形输出(可以是矩阵而不是数据框),将 NA 放在当时没有可用数据的地方。像这样的:
(30-min span in this direction -->)
2013-08-01 NA 8.001 7.918 7.621 7.564 7.718 7.846 7.481 7.351 7.275 7.291 ...
2013-08-02 9.372 9.485 9.151 8.870 8.504 8.404 8.342 8.278 8.229 8.092 8.038 ...
2013-08-03 ... ... ... ... ... ... ... ... ... ... ... ...
2013-08-04 ... ... ... ... ... ... ... ... ... ... ... ...
...
...
我已经移植了一个 Matlab 函数(为自己编写的)来实现这一点,但没有成功,顺便说一下 R 解释日期和时间。
更新:如何生成数据。 (考虑到原始数据来自我工作 7 年的数据库)
library(lubridate)
data_f = data.frame(time = seq(from = as_datetime("2013-08-01 00:30:00"),
to = as_datetime("2013-10-12 18:00:00"),
by = "30 min"),
data = runif(3491, 2, 14))
提前致谢。
【问题讨论】:
-
请提供生成数据框的代码
-
嗨,这是来自我工作 7 年的数据库。一个典型的不使用数据的测试用例是:
require(lubridate)然后使用data_f = data.frame(time = seq(from = as_datetime("2013-08-01 00:30:00"), to = as_datetime("2013-10-12 18:00:00"), by = "30 min", data = runif(3491, 2, 14))) -
最好在问题中添加代码而不是在 cmets 部分。
标签: r time-series reshape