#r #time-series #s-plus
#r #временные ряды #s-plus
Вопрос:
В R отлично работает следующее
myarray <- as.array(list(c(5,5), 9, c(4,2,2,4,6)))
mydf <- as.data.frame(myarray)
Но в Splus этого не происходит — выдается сообщение об ошибке:
Problem in data.frameAux.list(x, na.strin&s = na.st..: ar&uments imply differin&
number of rows: 2, 1, 5
Use traceback() to see the call stack
Вопрос: Что происходит? Как я могу заставить это работать в Splus?
РЕДАКТИРОВАТЬ: Я должен пояснить, почему я прохожу через этот странный процесс обработки a list
как data.frame
. Это потому, что в конечном итоге я хотел бы сделать что-то вроде следующего в Splus:
mypos <- timeSeq("1/1/08", "1/3/08", by = "days")
myts <- timeSeries(data = mydf, positions = mypos)
Я думаю, что наилучшим возможным вариантом прямо сейчас было бы создать список типа:
mytshack <- list(mypos, as.list(myarray))
Но это неуклюже, и я хотел бы получить функциональность timeSeries
, если это возможно
Ответ №1:
ОТРЕДАКТИРОВАНО после комментариев.
SPlus не допускает использования векторов в качестве значений в фрейме данных, в отличие от R. Для этого вам придется использовать список, и я бы просто сделал :
day <- c("1/1/2000","1/2/2000","1/3/2000")
names(myarray) <- day
который обеспечивает доступ к данным обычным способом :
&&t; myarray[["1/1/2000"]]
[1] 5 5
Учитывая ваше подтверждение, что это действительно то, что вы хотите, и дополнительную информацию о наборе данных, попробуйте это :
myarray <- as.array(list(c(5,5), 9, c(4,2,2,4,6)))
mydf <- as.matrix(myarray)
colnames(mydf) <- "myarray"
mypos <- timeSeq("1/1/08", "1/3/08", by = "days")
myts <- timeSeries(data = mydf, positions = mypos)
seriesData(myts)
Это работает в SPlus. Временным рядам нужен прямоугольный объект, а as.rectan&ular не может работать с массивами. Итак, преобразования в матрицу будет достаточно. Тем не менее, я бы просто использовал пакет timeSeries
в R вместо того, чтобы собирать его вместе в SPlus.
Комментарии:
1. @Joris: Ну, это было то, чего я хотел. Чего я не упомянул, так это того, что
1, 2, 3
фактически соответствуют календарным датам, а5, 5
будут соответствовать двум событиям, каждое размером 5, происходящим в течение дня 1. В конечном итоге я хотел бы превратить это вtimeSeries
объект.2. @brianjd : зачем использовать
as.data.frame
then вместоlist
?3. @Joris: Я только что отредактировал свой первоначальный вопрос, чтобы включить справочную информацию о том, что я рассматриваю
list
какdata.frame
a. Это потому, что в конечном итоге я хотел бы создатьtimeSeries
объект изdata.frame
и иметь возможность делать такие вещи, как поднабор по дате. Я мог просто поместить все (включая даты) в список, как я упоминал при редактировании (на самом деле, кажется, это единственный вариант прямо сейчас), но доступ к подэлементам данных, соответствующим датам, был бы неуклюжим и потребовал бы вспомогательных функций. Кстати, я ценю обсуждение на данный момент. Спасибо!4. @brianjd : тогда просто используйте имена, поскольку вы можете использовать даты в индексе для выбора then. Я отредактировал свой ответ, чтобы проиллюстрировать это.
5. @brianjd : также внедрил это во временные ряды. смотрите ответ