Удаление одного значения из объекта ts () в R без изменения класса объекта

#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 с помощью new start , 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 для меня это не выдает никаких ошибок