-2

我有一个函数结果,它接受一个 71x2446 数据帧并返回一个 2x2446 双矩阵。2446 对中的每一个中的第一个数字代表一个整数 1-6,这基本上是该线适合的类别,第二个数字是该类别的损益。我想计算每个类别的利润总和,同时计算每个类别的频率。我的问题是我写它的方式是否是对向量的有效使用

  vec<-as.data.frame(t(apply(theData,1,theresults)))
  vec[2][vec[1]==1]->successCrossed
  vec[2][vec[1]==2]->failCrossed
  vec[2][vec[1]==3]->successFilled
  vec[2][vec[1]==4]->failFilled
  vec[2][vec[1]==5]->naCount
  vec[2][vec[1]==6]->otherCount

然后在汇总结果时会调用一堆长度()和平均值()。

结果以这种方式引用原始数据框

   theresults<-function(theVector)
  {
       if(theVector[['Aggressor']]=="Y")
       {
      if(theVector[['Side']]=="Sell")
      {choice=6}
      else
     {choice=3}
     if(!is.na(theVector[['TradePrice']])&&!is.na(theVector[['L1_BidPri_1']])&&!is.na(theVector[['L1_AskPri_1']])&&!is.na(theVector[['L2_BidPri_1']])&&!is.na(theVector[['L2_AskPri_1']]))
{
  Profit<-  switch(choice,                           
                  -as.numeric(theVector[['TradePrice']]) + 10000*as.numeric(theVector[['L1_AskPri_1']])/as.numeric(theVector[['L2_BidPri_1']]),
                  -as.numeric(theVector[['TradePrice']]) + 10000*as.numeric(theVector[['L1_BidPri_1']])/as.numeric(theVector[['L2_BidPri_1']]),
4

2 回答 2

0

您可以尝试将 2x2446 向量组合成表示类型和利润状态的字符串向量......然后在其上调用“table”。

这是一个例子:

data = cbind(sample(1:6, replace=T, 30),
     sample (c("profit", "loss"), replace=T, 30))

x = apply(data, MARGIN=1, paste, collapse="")

table(x)
于 2013-01-25T23:29:34.680 回答
0

我很确定,对于这种类型的操作,即使数据集在数十万行中,正确的答案是使用 Uwe 格言;这段代码足够快,不会成为程序的瓶颈。(作为对另一个答案的回应,相对于我当前的解决方案, cbind 很慢且内存密集。)

于 2013-06-28T14:08:15.263 回答