【发布时间】:2020-09-21 00:56:38
【问题描述】:
我正在尝试将数据表的不规则时间序列转换为规则时间序列。我的数据是这样的
library(data.table)
dtRes <- data.table(time = c(0.1, 0.8, 1, 2.3, 2.4, 4.8, 4.9),
abst = c(1, 1, 1, 0, 0, 3, 3),
farbe = as.factor(c("keine", "keine", "keine", "keine", "keine", "rot", "blau")),
gier = c(2.5, 2.5, 2.5, 0, 0, 3, 3),
goff = as.factor(c("haus", "maus", "toll", "maus", NA, "maus", "maus")),
huft = as.factor(c(NA, NA, NA, "wolle", "wolle", "holz", "holz")),
mode = c(4, 4, 4, 2.5, NA, 3, 3))
如何通过大约 1 秒的块大小以块的形式聚合观察结果? (行数可变 - 如果 1 秒内没有行,则为 0)结果应该是数字列的平均值(省略 NA),如果有超过 1 个唯一行,则结果应该是整个重复行的因子价值。如果这对于因子是不可能的或对您没有意义,也可以只取因子列中特定第二个的第一个值。这样,它将是真正的常规时间序列,没有任何重复的时间。如果间隔没有值(如示例中的第 2 秒),则结果为 NA。
最终结果可能如下所示(取决于是否重复行):
有重复:
wiDups <- data.table(time = c(1, 1, 2, 3, 4, 5, 5),
abst = c(1, 1, NA, 1, NA, 5, 5),
farbe = as.factor(c("keine", "keine", NA, "keine", NA, "rot", "blau")),
gier = c(2.5, 2.5, NA, 0, NA, 4.5, 4.5),
goff = as.factor(c("haus", "maus", NA, "maus", NA, "maus", "maus")),
huft = as.factor(c(NA, NA, NA, "wolle", NA, "holz", "holz")),
mode = c(5, 5, NA, 2.5, NA, 4, 4))
并且没有重复:
noDups <- data.table(time = c(1, 2, 3, 4, 5),
abst = c(1, NA, 1, NA, 5),
farbe = as.factor(c("keine", NA, "keine", NA, "rot")),
gier = c(2.5, NA, 0, NA, 4.5),
goff = as.factor(c("haus", NA, "maus", NA, "maus")),
huft = as.factor(c(NA, NA, "wolle", NA, "holz")),
mode = c(5, NA, 2.5, NA, 4))
将其转换为时间序列对象会更好吗?
【问题讨论】:
标签: r datatable time-series xts zoo