【发布时间】:2018-04-02 11:58:52
【问题描述】:
我有以下数据框(称为mydata_tsample):
cusip_id trd_exctn_dt trd_exctn_tm price contra_party_type **refPrice**
BUHADU 01.04.2016 01:10:50 101.00 C 102.10
BUHADU 01.04.2016 02:10:50 101.50 C 102.10
BUHADU 01.04.2016 08:10:50 102.10 D 102.10
BUHADU 01.04.2016 09:10:50 102.10 C 102.10
BUHADU 02.04.2016 07:12:50 90.50 C 90.85
BUHADU 02.04.2016 09:10:55 90.85 D 90.85
BUHADU 02.04.2016 12:11:40 90.90 C 91.00
BUHADU 02.04.2016 12:12:02 91.00 D 91.00
XDSEOI 03.04.2016 06:52:51 50.00 D 50.00
XDSEOI 03.04.2016 08:40:58 50.20 C 50.00
XDSEOI 03.04.2016 15:10:51 51.00 C 52.00
XDSEOI 03.04.2016 15:14:51 52.00 D 52.00
我想生成/添加一个使用 for 循环计算的新列(称为 refPrice)。
对于RefPrice 列中的每一行,我想在以下条件下提取价格:
- 相同
cusip_ID - 相同
trd_exctn_dt -
contra_party_type= D - 然后取最接近
trd_exctn_tm的价格
我做了一个代码就是这样做的:
for (i in 1:nrow(mydata_tsample)){
Mtx_aftr_CUSIP=mydata_tsample[mydata_tsample$cusip_id %in% mydata_tsample[i,1],]
Mtx_aftr_CUSIP_dt=Mtx_aftr_CUSIP[Mtx_aftr_CUSIP$trd_exctn_dt %in% mydata_tsample[i,2],]
Mtx_aftr_CUSIP_dt_dealer=Mtx_aftr_CUSIP_dt[Mtx_aftr_CUSIP_dt$contra_party_type %in% "D",]
if(nrow(Mtx_aftr_CUSIP_dt_dealer)==0) {next} else
{
closesttime=which.min(abs(Mtx_aftr_CUSIP_dt_dealer$trd_exctn_tm - mydata_tsample[i,3]))
mydata_tsample$RefPrice[i]=Mtx_aftr_CUSIP_dt_dealer[closesttime,4] }
}
我的问题是速度。我需要几个小时来处理 0.5Mio。线。我总共有 5Mio。线条...
我尝试使用doParallel,但没有成功。
library(doParallel)
registerDoParallel(cores=4)
library(foreach)
foreach(i=1:nrow(mydata_tsample)) %dopar% {
Mtx_aftr_CUSIP=mydata_tsample[mydata_tsample$cusip_id %in% mydata_tsample[i,1],]
Mtx_aftr_CUSIP_dt=Mtx_aftr_CUSIP[Mtx_aftr_CUSIP$trd_exctn_dt %in% mydata_tsample[i,2],]
Mtx_aftr_CUSIP_dt_dealer=Mtx_aftr_CUSIP_dt[Mtx_aftr_CUSIP_dt$contra_party_type %in% "D",]
if(nrow(Mtx_aftr_CUSIP_dt_dealer)==0) {next} else
{
closesttime=which.min(abs(Mtx_aftr_CUSIP_dt_dealer$trd_exctn_tm - mydata_tsample[i,3]))
mydata_tsample$RefPrice[i]=Mtx_aftr_CUSIP_dt_dealer[closesttime,4]
}
}
}
【问题讨论】:
-
我认为你需要分组操作
-
谢谢阿克伦。这会加快性能吗?
-
您描述算法的方式,
refprice将始终与price相同,因为最接近行的trd_extn_time的时间将是行本身。你的意思是最近的邻居不同吗? -
最近的
D类型 ....
标签: r performance loops data.table