具有data.table的矢量化功能

布赖恩·斯克鲁格斯

我正在尝试编写向量化函数。这是使用data.frame“ final”的伪代码。BID_AMOUNT /持续时间*概率* bill_factor

从data.frame“时间表”中检索bill_factor的位置。每行的bill_factor由Duration和Number_Sequence标识。对于第1行,这将是schedule [3,1]。对于第2行,这将是schedule [3,2],依此类推。

这似乎是一个迭代问题,可以使用apply函数之一来解决。我还考虑过使用purrr包中的功能map2。我什么都不能工作。

预期结果:我想要一个函数,该函数将从Schedule中获取Duration / Number_Sequence的任意组合的数据。

任何帮助将不胜感激。

  • 学士学位
library(data.table)
#create data
data <- structure(list(OPPORTUNITY_ID = c(28249800L, 28249800L, 28249800L,28249845L, 28249845L, 28249845L, 28249845L, 28312677L, 28312677L,28312677L, 28312677L, 28312677L)
               , Number_Sequence = c(1L, 2L, 3L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 5L)
               , BID_AMOUNT = c(1700000, 1700000, 1700000, 2250000, 2250000, 2250000, 2250000, 1100000, 1100000, 1100000, 1100000, 1100000)
               , Probability = c(30L, 30L, 30L, 20L, 20L, 20L, 20L, 50L, 50L, 50L, 50L, 50L), Duration = c(3L, 3L, 3L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L))
          , row.names = c(NA, -12L), class = c("data.table", "data.frame")
          , sorted = "OPPORTUNITY_ID")

#reorder and clean up column names. 
setcolorder(data, c('OPPORTUNITY_ID', 'BID_AMOUNT', 'Probability', 'Duration'))
data$Probability <- data$Probability/100

#create column bill_factor
data$bill_factor <-  c(rep(.33,3), rep(.25, 4), rep(.2, 5))

#create schedule of payments
schedule <- structure(list(`0` = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L,11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, NA, NA, NA, NA),
               `1` = c(1, 0.5, 0.33, 0.25, 0.2, 0.17, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.02, NA, NA, NA, NA)
               , `2` = c(NA, 0.5, 0.33, 0.25, 0.2, 0.17, 0.15, 0.1, 0.1, 0.1, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.03, 0.03, 0.03, 0.03, 0.03, NA, NA, NA, NA)
               , `3` = c(NA, NA, 0.33, 0.25, 0.2, 0.17, 0.25, 0.2, 0.15, 0.1, 0.1, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.03, 0.03, 0.03, NA, NA, NA, NA)
               , `4` = c(NA, NA, NA, 0.25, 0.2, 0.17, 0.25, 0.25, 0.25, 0.15, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.08, 0.05, 0.05, 0.05, 0.05, 0.03, 0.03, 0.03, NA, NA, NA, NA)
               , `5` = c(NA, NA, NA, NA, 0.2, 0.17, 0.15, 0.15, 0.15, 0.2, 0.2, 0.15, 0.1, 0.1, 0.1, 0.1, 0.1, 0.08, 0.08, 0.08, 0.05, 0.05, 0.05, 0.03, NA, NA, NA, NA)
               , `6` = c(NA, NA, NA, NA, NA, 0.17, 0.1, 0.1, 0.1, 0.1, 0.1, 0.2, 0.2, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.08, 0.05, 0.05, 0.05, 0.05, NA, NA, NA, NA)
               , `7` = c(NA, NA, NA, NA, NA, NA, 0.05, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.15, 0.15, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.05, 0.05, NA, NA, NA, NA)
               , `8` = c(NA, NA, NA, NA, NA, NA, NA, 0.05, 0.05, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.15, 0.15, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.05, NA, NA, NA, NA)
               , `9` = c(NA, NA, NA, NA, NA, NA, NA, NA, 0.05, 0.05, 0.1, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.1, 0.08, 0.08, 0.1, 0.1, 0.1, 0.08, NA, NA, NA, NA)
               , `10` = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.08, 0.08, 0.08, 0.08, 0.1, NA, NA, NA, NA)
               , `11` = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.08, 0.1, NA, NA, NA, NA)
               , `12` = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.08, NA, NA, NA, NA)
               , `13` = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, NA, NA, NA, NA)
               , `14` = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.05, 0.05, 0.03, 0.03, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, NA, NA, NA, NA)
               , `15` = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.05, 0.05, 0.05, NA, NA, NA, NA)
               , `16` = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.05, NA, NA, NA, NA)
               , `17` = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, NA, NA, NA, NA)
               , `18` = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, NA, NA, NA, NA)
               , `19` = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, NA, NA, NA, NA)
               , `20` = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.03, 0.03, 0.03, 0.03, 0.03, NA, NA, NA, NA)
               , `21` = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.03, 0.03, 0.03, 0.03, NA, NA, NA, NA)
               , `22` = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.03, 0.03, 0.03, NA, NA, NA, NA)
               , `23` = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.03, 0.03, NA, NA, NA, NA)
               , `24` = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.01, NA, NA, NA, NA)
               , Total = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, NA, NA, NA, NA))
          , row.names = c(NA, -28L), class = c("data.table", "data.frame"))
schedule <- schedule[,!26]
schedule <- schedule[,!1]

#set colnames to 1 indexing
colnames(schedule) = as.character(c(1:24))

#create results column
results <- data[,.(result = BID_AMOUNT/Duration*Probability*bill_factor), by=OPPORTUNITY_ID]



final <- cbind(data,results)
final <- final[,!7]
Lumartor

您可以使用apply函数在数据框中创建bill_factor列。只需将schedule作为额外的参数传递给apply函数:

data$bill_factor <- apply(data, 
                          1, 
                          function(x, s) s[[x["Duration"], x["Number_Sequence"]]], 
                          s=schedule)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在熊猫数据框列上带有计数器的矢量化功能

来自分类Dev

在熊猫数据框列上带有计数器的矢量化功能

来自分类Dev

是否有针对OCaml的线性代数库,可利用矢量化功能?

来自分类Dev

有效的日期矢量化

来自分类Dev

numpy矢量化功能

来自分类Dev

如何建立没有循环的距离矩阵(矢量化)?

来自分类Dev

矢量化R for循环的有效方法

来自分类Dev

带有tfidf和计数矢量化器的gridsearchcv

来自分类Dev

对所有参数组合进行矢量化

来自分类Dev

分别使用哈希矢量化器和计数矢量化器有什么区别?

来自分类Dev

与自动矢量化进行边缘检测相比,如何执行具有更好性能的手动代码矢量化

来自分类Dev

scikit学习矢量化器词汇,具有映射到同一索引的多个术语

来自分类Dev

具有熊猫数据框的矢量化Haversine公式

来自分类Dev

如何使用Numba对具有多个输出的函数进行矢量化处理?

来自分类Dev

使用具有范围查找JTS矢量化多边形

来自分类Dev

堆叠具有重叠索引的数组。寻找循环的矢量化方法

来自分类Dev

如何对具有嵌套for循环的字符串提取脚本进行矢量化处理?

来自分类Dev

如何矢量化具有不同形状的ndarray作为参数的函数?

来自分类Dev

Numba中的组合矢量化功能

来自分类Dev

具有count和tfidf矢量化器的管道会产生TypeError:预期的字符串或类似字节的对象

来自分类Dev

在具有重复索引的数据帧之间进行矢量化计算时,Pandas 保持索引顺序

来自分类Dev

有没有办法矢量化这个 Matlab/Octave 代码

来自分类Dev

在data.tables中创建新列时如何使用矢量化的get()函数?

来自分类Dev

MATLAB:在两个矩阵上应用函数的有效(矢量化)方法?

来自分类Dev

用于基于蒙特卡洛的Pi计算的Python有效矢量化

来自分类Dev

有一种矢量化的方法来计算sympy中的梯度吗?

来自分类Dev

带有引号列的数据表子集缺乏矢量化

来自分类Dev

带有索引数组的numpy 3D数组矢量化访问

来自分类Dev

为什么矢量化在此for循环中没有好处?

Related 相关文章

  1. 1

    在熊猫数据框列上带有计数器的矢量化功能

  2. 2

    在熊猫数据框列上带有计数器的矢量化功能

  3. 3

    是否有针对OCaml的线性代数库,可利用矢量化功能?

  4. 4

    有效的日期矢量化

  5. 5

    numpy矢量化功能

  6. 6

    如何建立没有循环的距离矩阵(矢量化)?

  7. 7

    矢量化R for循环的有效方法

  8. 8

    带有tfidf和计数矢量化器的gridsearchcv

  9. 9

    对所有参数组合进行矢量化

  10. 10

    分别使用哈希矢量化器和计数矢量化器有什么区别?

  11. 11

    与自动矢量化进行边缘检测相比,如何执行具有更好性能的手动代码矢量化

  12. 12

    scikit学习矢量化器词汇,具有映射到同一索引的多个术语

  13. 13

    具有熊猫数据框的矢量化Haversine公式

  14. 14

    如何使用Numba对具有多个输出的函数进行矢量化处理?

  15. 15

    使用具有范围查找JTS矢量化多边形

  16. 16

    堆叠具有重叠索引的数组。寻找循环的矢量化方法

  17. 17

    如何对具有嵌套for循环的字符串提取脚本进行矢量化处理?

  18. 18

    如何矢量化具有不同形状的ndarray作为参数的函数?

  19. 19

    Numba中的组合矢量化功能

  20. 20

    具有count和tfidf矢量化器的管道会产生TypeError:预期的字符串或类似字节的对象

  21. 21

    在具有重复索引的数据帧之间进行矢量化计算时,Pandas 保持索引顺序

  22. 22

    有没有办法矢量化这个 Matlab/Octave 代码

  23. 23

    在data.tables中创建新列时如何使用矢量化的get()函数?

  24. 24

    MATLAB:在两个矩阵上应用函数的有效(矢量化)方法?

  25. 25

    用于基于蒙特卡洛的Pi计算的Python有效矢量化

  26. 26

    有一种矢量化的方法来计算sympy中的梯度吗?

  27. 27

    带有引号列的数据表子集缺乏矢量化

  28. 28

    带有索引数组的numpy 3D数组矢量化访问

  29. 29

    为什么矢量化在此for循环中没有好处?

热门标签

归档