R / Splus中具有可变长度数据的数据帧

时间:2011-03-17 16:55:59

标签: r time-series 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.strings = na.st..: arguments imply differing 
 number of rows: 2, 1, 5 
Use traceback() to see the call stack
问:发生了什么事?我怎样才能在Splus中使用它?

编辑:我应该更清楚为什么我要经历这个将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 个答案:

答案 0 :(得分:3)

评论后编辑。

SPlus不允许向量作为数据帧中的值,与R相反。您必须使用列表,我只是这样做:

day <- c("1/1/2000","1/2/2000","1/3/2000")
names(myarray) <- day

允许以通常的方式访问数据:

> 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。 timeSeries需要一个矩形对象,as.rectangular不能处理数组。所以转换成矩阵就行了。不过,我只是在R中使用包timeSeries而不是在SPlus中将它们一起黑客攻击。