【问题标题】:rbind time and value vectors of different lengths from list to data.framerbind从列表到data.frame的不同长度的时间和值向量
【发布时间】:2015-09-10 08:30:46
【问题描述】:

在此之前,我很抱歉没有提供可重现的示例,但我希望 通过我的描述,案件变得清晰

我有一长串资产价格和附在上面的日期。 列表如下所示

> my.list

[[1]]
AT0000743059.time     AT0000743059
1          02.01.2012       24.020
2          03.01.2012       24.225
3          04.01.2012       24.130
4          05.01.2012       23.935


[[2]]
AT0000743055.time     AT0000743055
1          02.01.2012       24.020
2          03.01.2012       24.225
3          04.01.2012       24.130
4          05.01.2012       23.935
5          09.01.2012       24.060

并非列表中的所有对象都具有相同的长度。 我需要的是 rbind 列表中的每个对象彼此相邻,以使输出看起来像这样

    AT0000743059.time AT0000743059  AT0000743055.time     AT0000743055
1          02.01.2012       24.020         02.01.2012           24.020
2          03.01.2012       24.225         03.01.2012           24.225
3          04.01.2012       24.130         04.01.2012           24.130
4          05.01.2012       23.935         05.01.2012           23.935
5          NA               NA             09.01.2012           24.060

使用 plyr 的 ldply 以结束

> plyr::ldply(my.list, cbind)

    AT0000743059.time AT0000743059  AT0000743055.time  AT0000743055
1          02.01.2012       24.020  NA                 NA       
2          03.01.2012       24.225  NA                 NA
3          04.01.2012       24.130  NA                 NA       
4          05.01.2012       23.935  NA                 NA       
5                                   02.01.2012         24.020
6                                   03.01.2012         24.225
7                                   04.01.2012         24.130
8                                   05.01.2012         23.935
9                                   09.01.2012         24.060

将 NA 移动到底部并在之后删除它们会导致麻烦 日期以某种奇怪的方式转变。我希望有一个有效的 处理这个问题的方法。感谢您的帮助

【问题讨论】:

  • 你真的想绑定它们,还是将它们加入看起来更合理的时间列?
  • @Wannes Rosiers:这也是我可以处理的解决方案。你说可以将列表转换成一个大的 xts 对象吗?

标签: r list plyr rbind


【解决方案1】:

目前,合并是在一个循环中定义的,可能根本不是你想要的,但这会给你我建议的输出:

my.list <-list(
  data.frame(AT0000743059.time = c("02.01.2012","03.01.2012","04.01.2012","05.01.2012"),
         AT0000743059 = c(24.020,24.225,24.130,23.935),
         stringsAsFactors = FALSE),
  data.frame(AT0000743055.time = c("02.01.2012","03.01.2012","04.01.2012","05.01.2012","09.01.2012"),
         AT0000743055 = c(24.020,24.225,24.130,23.935,24.060),
         stringsAsFactors = FALSE)
)

result <- my.list[[1]]
colnames(result)[1] <- "time"

for (i in 2:length(my.list)){
  temp <- my.list[[i]]
  colnames(temp)[1] <- "time"
  result <- merge(result, temp,all = TRUE)
}

与您想要的输出的唯一区别是我只保留了一个时间列,因为它是该行中每个测量值的时间。

【讨论】:

    猜你喜欢
    • 2018-12-31
    • 2020-08-16
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 2018-07-26
    • 2012-10-18
    相关资源
    最近更新 更多