我有一个数据框,我使用sql db中的数据构建。第一列包含日期,另一列包含double或string,应为double。
我需要将字符串转换为真正的双倍。
我试图用"数字"提取数据。在另一个数据框中,然后:as.numeric或class = numeric。
这两个选项都会返回错误。
有什么想法吗?
非常感谢, 文森特
编辑: 这是我得到问题的函数/
function(Best,Worst,PriceTable){
PnL=data.frame()
#PnL long
for(i in 1:(nrow(Best)-1)){PnL[i,1]=Best[i+1,1];pnl=0;divide=0;for (j in 1:ncol(Best)){if((!is.null(PriceTable[i+1,as.character(Best[i,j])])) && (!is.na(as.numeric(PriceTable[i+1,as.character(Best[i,j])])))){pnl=pnl+as.numeric(PriceTable[i+1,as.character(Best[i,j])]);divide=divide+1}};PnL[i,2]=pnl/divide;PnL[i,3]=0;PnL[i,4]=divide}
#PnL short
for(i in 1:(nrow(Worst)-1)){pnl=0;divide=0;for (j in 1:ncol(Worst)){if((!is.null(PriceTable[i+1,as.character(Worst[i,j])])) && (!is.na(as.numeric(PriceTable[i+1,as.character(Worst[i,j])])))){pnl=pnl+as.numeric(PriceTable[i+1,as.character(Worst[i,j])]);divide=divide+1}};PnL[i,3]=-pnl/divide;PnL[i,5]=divide}
colnames(PnL)[1]='Date'
colnames(PnL)[2]='PnL Long'
colnames(PnL)[3]='PnL Short'
colnames(PnL)[4]='N trade long'
colnames(PnL)[5]='N trade short'
#overall PnL
for (i in 1:nrow(PnL)){PnL[i,6]=PnL[i,3]+PnL[i,2]}
colnames(PnL)[6]='PnL'
return(PnL)
}
我的TablePrice看起来(更大)像:
row.names Date 25179M103 371532102 186905105 382388106
16 2011-01-25 0.08094573 0.001366867 -0.08003574 0.02431649
21 2011-02-01 0.10623324 0.033948941 0.02128497 0.02949376
40 2011-03-01 0.02046414 -0.028119508 -0.16465137 -0.09292013
63 2011-04-01 0.04486064 0.034553366 0.01336088 0.02603872
83 2011-05-02 -0.02220955 -0.016687422 -0.07369759 0.03656137