#r #time-series
#r #временные ряды
Вопрос:
У меня есть набор данных, который имеет ts()
класс.
dput
Выглядит так:
structure(c(0.0499999999999998, -0.0499999999999998, 0.12, 0.28,
0.109999999999999, 0.0500000000000007, -0.44, 0.16, -0.11, -0.8,
-0.24, 0.0800000000000001, -0.13, -0.19, 0.0500000000000007,
0.56, -0.2, -0.0299999999999994, -0.130000000000001, -0.109999999999999,
-0.0700000000000003, 0.0499999999999998, 0.100000000000001, -0.04,
-0.0200000000000005, 0.13, -0.21, -0.149999999999999, -0.180000000000001,
-0.13, -0.0800000000000001, -0.13, 0.0800000000000001, 0.41,
0.0499999999999998, 0.19, -0.11, 0, -0.2, -0.13, 0.0300000000000002,
-0.27, -0.159999999999999, -0.04, -0.0800000000000001, -0.0300000000000002,
-0.04, -0.0299999999999998, 0.0600000000000001, -0.04, -0.11,
-0.13, -0.12, 0.0500000000000003, -0.1, -0.12, -0.0299999999999998,
-0.0100000000000002, 0.0700000000000003, 0.12, 0.0300000000000002,
-0.11, 0.0899999999999999, 0.53, 0.3, 0.0899999999999999, 0.0300000000000002,
-0.3, 0.0699999999999994, 0.2, -0.0300000000000002, -0.13, 0.04,
0, -0.149999999999999, -0.0300000000000002, -0.0300000000000002,
-0.00999999999999979, 0.04, -0.12, -0.04, -0.14, -0.19, 0.04,
0.0600000000000001, -0.1, 0.17, 0.14, 0.0699999999999998, -0.14,
-0.02, -0.0900000000000003, 0.14, 0.02, -0.0899999999999999,
-0.21, 0.0299999999999998, -0.0899999999999999, 0, -0.0300000000000002,
-0.13, 0, 0.02, 0.0100000000000002, 0.3, 0.43, -0.0499999999999998,
0.0199999999999996, 0.0300000000000002, -0.16, -0.0300000000000002,
-0.11, 0.0700000000000003, -0.0900000000000003, -0.0800000000000001,
0.1, 0.02, 0.0300000000000002, 0.0800000000000001, 0.3, 0.11,
0.0299999999999994, 0.12, -0.0199999999999996, -0.04, 0.0199999999999996,
0.0800000000000001, 0.2, 0.04, -0.23, -0.18, -0.0899999999999999,
-0.11, -0.12, -0.0699999999999994, -0.27, -0.0299999999999998,
-0.15, -0.02, 0.0899999999999999, 0.0100000000000002, 0.02, -0.1,
-0.15, -0.02, -0.14, -0.0800000000000001, -0.0699999999999998,
-0.14, -0.0800000000000001), .Tsp = c(2008.16666666667, 2020.58333333333,
12), class = "ts")
Визуально это выглядит так:
Я пытаюсь удалить одно значение за март 2008 года. Но я что-то использую
foo[-c(1:1)]
он преобразует данные в numeric
, и это не будет работать для меня.
Как удалить эту переменную и сохранить значения ts()
класса и даты? Спасибо!
Комментарии:
1. Вы можете преобразовать его в
NA
или преобразовать вts
с помощью newstart
,end
т.е.foo[1] <- NA
Ответ №1:
Любой из них должен дать запрошенный результат.
Первый используется window.ts
для начала с указанного года и месяца.
Второй также использует window.ts
, но указывает его в терминах второго значения времени, а не жестко кодирует его.
Третий заменяет первое значение на NA, а затем запускается na.omit
для его удаления. Это должно сработать, если в ряду нет значений NA.
Четвертый добавляет ряд к нулевому ряду, который запаздывает вперед и должен работать, если в ряду нет значений NA.
Пятый преобразуется в класс зоопарка, где работает подписка, а затем преобразуется обратно.
Шестой такой же, как и второй, за исключением того, что он использует другое выражение для второго момента времени.
window(foo, start = c(2008, 4))
window(foo, start = time(foo)[2])
na.omit(replace(foo, 1, NA))
foo lag(0 * foo, -1)
library(zoo)
as.ts(as.zoo(foo)[-1])
window(foo, start = tsp(foo)[1] deltat(foo))
Ответ №2:
Одним из вариантов является повторное преобразование обратно в ts
foo2 <- ts(foo[-1], start = index(foo)[2], frequency = frequency(foo))
-выходной сигнал
foo2
# Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
#2008 -0.05 0.12 0.28 0.11 0.05 -0.44 0.16 -0.11 -0.80
#2009 -0.24 0.08 -0.13 -0.19 0.05 0.56 -0.20 -0.03 -0.13 -0.11 -0.07 0.05
#2010 0.10 -0.04 -0.02 0.13 -0.21 -0.15 -0.18 -0.13 -0.08 -0.13 0.08 0.41
#2011 0.05 0.19 -0.11 0.00 -0.20 -0.13 0.03 -0.27 -0.16 -0.04 -0.08 -0.03
#2012 -0.04 -0.03 0.06 -0.04 -0.11 -0.13 -0.12 0.05 -0.10 -0.12 -0.03 -0.01
#2013 0.07 0.12 0.03 -0.11 0.09 0.53 0.30 0.09 0.03 -0.30 0.07 0.20
#2014 -0.03 -0.13 0.04 0.00 -0.15 -0.03 -0.03 -0.01 0.04 -0.12 -0.04 -0.14
#2015 -0.19 0.04 0.06 -0.10 0.17 0.14 0.07 -0.14 -0.02 -0.09 0.14 0.02
#2016 -0.09 -0.21 0.03 -0.09 0.00 -0.03 -0.13 0.00 0.02 0.01 0.30 0.43
#2017 -0.05 0.02 0.03 -0.16 -0.03 -0.11 0.07 -0.09 -0.08 0.10 0.02 0.03
#2018 0.08 0.30 0.11 0.03 0.12 -0.02 -0.04 0.02 0.08 0.20 0.04 -0.23
#2019 -0.18 -0.09 -0.11 -0.12 -0.07 -0.27 -0.03 -0.15 -0.02 0.09 0.01 0.02
#2020 -0.10 -0.15 -0.02 -0.14 -0.08 -0.07 -0.14 -0.08
или мы присваиваем значение NA
foo[1] <- NA
Комментарии:
1. Спасибо, что уделили мне время! Первый вариант по какой-то причине не работает. Когда я использую ваш код, он выдает мне сообщение об ошибке
Error: x is not a tsibble.
2. Второе решение формально работает, но я не уверен, нравится ли моей модели это
NA
или0
.3. Но длина моей переменной остается неизменной
NA
, следовательно, это все еще проблема. Потому что я не могуcbind
использовать две переменные с разнымиlength
.4. @AnakinSkywalker для меня это не выдает никаких ошибок