【问题标题】:Data frames with variable-length data in R/SplusR/Splus 中具有可变长度数据的数据帧
【发布时间】:2011-07-17 13:54:53
【问题描述】:

以下在 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 的功能

【问题讨论】:

    标签: r time-series s-plus


    【解决方案1】:

    在 cmets 之后编辑。

    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 中将它一起破解。

    【讨论】:

    • @Joris:嗯,这就是我想要的。我没有提到的是1, 2, 3 实际上对应于日历日期,5, 5 将对应于两个事件,每个大小为 5,发生在第一天。最终我想把它变成一个 @987654327 @对象。
    • @brianjd :为什么使用as.data.frame 而不是list
    • @Joris:我刚刚编辑了我的原始问题,以包含关于我将list 视为data.frame 的背景信息。这是因为我最终想从data.frame 构建一个timeSeries 对象,并能够执行诸如按日期设置子集之类的事情。我可以像我在编辑中提到的那样将所有内容(包括日期)放在一个列表中(实际上,现在似乎是唯一的选择)但是访问与日期对应的数据的子元素将是笨重并且需要辅助函数。顺便说一句,我很欣赏到目前为止的讨论。谢谢!
    • @brianjd :然后只需使用名称,因为您可以使用索引中的日期进行选择。我已经编辑了我的答案来说明这一点。
    • @brianjd :也将其破解为 timeSeries。看答案
    猜你喜欢
    • 2021-09-19
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多