如何在表格数据行上向量化迭代

时间:2018-11-30 04:48:29

标签: r dataframe iteration

我有一个表格数据集,它从文件中读取为数据框。行的顺序无关紧要。数据没有单个列充当该行的唯一标识符,但是可以合并三到四列以为该文件中的每个项目创建一个唯一标识符。

我想向列中添加带有分类变量的列。通过比较该特定行的其他一个或多个其他值,可以得出每一行的值。这些值均为文本,因此无法进行算术运算。

我当前正在使用数据框,因为它看起来很方便,但是我对该格式没有特殊的附件,并且如前所述,行的顺序无关紧要。

这是我要应用于每一行的函数,因此我可以生成一个值向量,以将其绑定到数据框作为新列

#input: line_item a single row from a dataframe with named columns
#output: a string
map_line_item_to_asset_class <- function(line_item){

  commodity <-  c('PHYSICAL INDEX FUTURE', 'PHYSICAL COMMODITY FUTURE','FINANCIAL COMMODITY FUTURE')
  equity <- c('ADR','COMMON STOCK', 'PFD', 'ETP', 'UNIT','REIT','EQUITY INDEX','EQUITY OPTION')
  fixed_income = c('ABS', 'CORP','SOVEREIGN DEBT','MUNI')
  other <- c('CASH')
  etp_fi_overrides <- c('EMLC')        

  asset_class <- line_item$INVESTMENT.TYPE
  if(line_item$INVESTMENT.TYPE %in% equity){
    asset_class <-'EQUITY'

    if(line_item$INVESTMENT %in% etp_fi_overrides)
      asset_class <- 'FIXED INCOME'
  } else{
    if(line_item$INVESTMENT.TYPE %in% fixed_income){
      asset_class <- 'FIXED INCOME'
    } else {
      if(line_item$INVESTMENT.TYPE %in% other) asset_class <- 'OTHER'
    } 
  }
  return(asset_class)
}

我知道我可以使用by()或使用nrow()进行简单的类似于C的for循环来做到这一点。我现在就是这样做的。我想知道如何(如果有的话)可以向量化此操作。我知道向量化通常比循环迭代更受青睐,但是我真的不知道如何将向量向量化的过程真正起作用,我一直看到这个词,人们告诉别人这样做,但是我不知道没有看到有关如何在已经完成该功能的堆栈函数之外进行操作的示例。请注意,我想学习如何将其向量化为学习练习。我完全知道,挂钟时间上的CPU时间差异可以忽略不计,并且我可以使用Apply复制外观。我想知道是否以及如何将其向量化,因为这是一项简单的练习,并且我想在CPU时间或内存确实重要的情况下如何正确地做到这一点。因此,告诉我只使用for循环还是仅使用一个apply并不会真正有帮助。 (我也知道vectorize(),并且它也只是语法糖果)。

0 个答案:

没有答案