【问题标题】:Create a panel from two data frames从两个数据框创建面板
【发布时间】:2011-05-01 14:15:45
【问题描述】:

我有两个数据框——一个是按日期(行)和股票代码(列)排列的股票收盘价:

> head(data.stocks)
        date     A   AAPL ABAT    AB    ABV
1 2010-10-04 32.59 278.64 3.65 26.42 125.89
2 2010-10-05 33.04 288.94 3.66 27.10 129.05
3 2010-10-06 32.67 289.19 3.59 26.99 129.90
4 2010-10-07 33.20 289.22 3.66 27.04 129.94
5 2010-10-08 33.80 294.07 3.84 26.76 132.66
6 2010-10-11 33.75 295.36 3.87 26.95 133.37

另一个数据框有未平仓合约 (oi),每个日期每个股票代码按一行排列:

> head(data.oi)
        date symbol  oi close
1 2010-10-04      A   6     0
2 2010-10-04     AA 104     0
3 2010-10-04   AAPL 940     0
4 2010-10-04     AB   0     0
5 2010-10-04   ABAT   0     0
6 2010-10-04    ABB   0     0

我想在第二个数据框中添加另一列,以便最终得到一个“面板”数据框,每行每个日期一个股票代码,并带有 oi 和收盘价。

我认为这个循环会起作用,但我收到以下错误:

> for (i in seq(length(data.oi$date))) {
+ row <- which(data.stocks$date == data.oi$date[i])
+ col <- which(colnames(data.stocks) == data.oi$symbol[i])
+ data.oi$close[i] <- data.stocks[row, col]
+ }
Error in data.oi$close[i] <- data.stocks[row, col] : 
  replacement has length zero

FWIW,它将第一个值存储在data.oi,然后失败:

> head(data.oi)
        date symbol  oi close
1 2010-10-04      A   6 32.59
2 2010-10-04     AA 104  0.00
3 2010-10-04   AAPL 940  0.00
4 2010-10-04     AB   0  0.00
5 2010-10-04   ABAT   0  0.00
6 2010-10-04    ABB   0  0.00

谢谢!我觉得reshapeaggregate 可以做到,但我不知道如何合并这两者。

【问题讨论】:

    标签: r merge aggregate reshape


    【解决方案1】:

    在 reshape2 包中融化并合并会很有用:

    library(reshape2)
    merge(subset(data.oi,select=-close), 
          melt(d,id.vars="date",variable.name="symbol",value.name="close"))
    

    【讨论】:

    • 谢谢!我已经为我的疯狂循环添加了close,所以它更容易! Melt 是我最好的新朋友。
    猜你喜欢
    • 2016-09-11
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 2019-11-02
    • 2022-08-11
    • 2017-10-16
    • 2021-12-03
    • 1970-01-01
    相关资源
    最近更新 更多