Кадры данных с данными переменной длины в R / Splus

#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 : также внедрил это во временные ряды. смотрите ответ