[英]Create a panel from two data frames
我有两个数据框-一个具有按日期(行)和股票代码(列)排列的收盘价的数据:
> 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
我想在第二个数据框中添加另一列,以便最终得到一个“面板”数据框,该数据框的每行日期/日期和收盘价均带有一个股票代号。
我以为这个循环会工作,但是出现以下错误:
> 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
谢谢! 我觉得reshape
或aggregate
可以做到这一点,但我不知道如何合并这两个。
在reshape2包中融化并合并将非常有用:
library(reshape2)
merge(subset(data.oi,select=-close),
melt(d,id.vars="date",variable.name="symbol",value.name="close"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.