【问题标题】:Unstacking huge dataset with stock returns用股票收益拆分庞大的数据集
【发布时间】:2017-04-07 15:17:33
【问题描述】:

我有一个很长的 CRSP data.frame,我正在尝试将其解栈为宽格式。

数据框包含 kypermno(股票标识符)、caldat(日期 yyyy-mm-dd)、prc(价格)、adjprc(调整后的价格)和 ret(回报)。数据框按股票 (kypermno) 和日期 (caldat) 排序,因此每一行代表给定日期的一只股票。

我想要的格式是:每个 kypermno 作为列(名称)和每一天(日期)作为行(名称)以及相应字段中的返回(删除 prc 和 adjprc)。

我试过这个:D_ret <- as.data.frame(unstack(hilfs_ret, ret ~ kypermno))

问题是并非所有股票都在所有日子里都有回报,所以我收到一条错误消息:

“(函数中的错误 (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, : Argumente implizieren unterschiedliche Anzahl Zeilen" (英文:Arguments 暗示不同的行数)

如果股票在该日期没有回报或什至不存在,则应填写“NA”。

当我跳过“as.data.frame”函数时,不会出现此错误消息,但我想要一个 data.frame 而不是列表。

使用 for 循环和 if 语句的解决方案不可行,因为数据集非常大(4800 万个条目)。

有没有办法解决这个问题?也许有重塑功能?

非常感谢您的帮助,祝您有美好的一天!

亲切的问候

kb

【问题讨论】:

    标签: r stack reshape


    【解决方案1】:

    您可以使用来自 tidyverse 包集合的函数。假设您的数据框称为“long_df”。然后此代码应将其转换为名为“wide_df”的数据框。

    library(tidyverse)
    wide_df <- tidyr::spread(long_df %>% select(-prc, -adjprc), 
                             key= kypermno,
                             value = ret)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-25
      • 2015-06-08
      • 2018-01-20
      • 1970-01-01
      • 2021-02-15
      • 2020-06-30
      • 2019-09-27
      • 1970-01-01
      相关资源
      最近更新 更多