R:对数据框的多列进行行式计算的最快方法

标签 r function dataframe apply

我有一个数据框,我想在其中添加另一列,该列是涉及 3 个其他列的计算结果。我现在使用的方法似乎很慢。有没有更好的方法来做同样的事情。这是我正在使用的方法。

library(bitops)

GetRes<-function(A, B, C){
  tagU <- bitShiftR((A*C), 4)
  tagV <- bitShiftR(B, 2)

  x<-tagU %% 2
  y<-tagV %% 4

  res<-(2*x + y) %% 4
  return(res)
}

df <- data.frame(id=letters[1:3],val0=1:3,val1=4:6,val2=7:9)
apply(df, 1, function(x) GetRes(x[2], x[3], x[4]))

我的数据框非常大,完成这个计算需要很长时间。有人可以建议我做得更好吗?

谢谢。

最佳答案

试试 mapply

mapply(GetRes, df[,2], df[,3], df[,4])

如果您让我们知道是哪个包裹 bitShiftR来自,我们可以在更大的数据上测试它,看看是否有任何性能提升。

更新
快速基准测试显示,mapply速度是您的 apply 的两倍
microbenchmark(apply(df[,2:4], 1, function(x) GetRes(x[1], x[2], x[3])), mapply(GetRes, df[,2], df[,3], df[,4]))
Unit: microseconds
                                                      expr     min       lq   median      uq      max neval
 apply(df[, 2:4], 1, function(x) GetRes(x[1], x[2], x[3])) 196.985 201.6200 206.7515 216.187 1006.775   100
                 mapply(GetRes, df[, 2], df[, 3], df[, 4])  99.982 105.6105 108.7560 112.232  149.311   100

关于R:对数据框的多列进行行式计算的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16184258/

相关文章:

php - Javascript 和 PHP 函数

python pandas数据框按降序排序

python - 根据分隔符将数据帧列拆分为两列

r - 使用 pheatmap 时裁剪的列标签

c++ - 在函数中使用数组 - C

c - 在 C 中,将指向结构的指针值发送到函数时返回 float 会更改结构的值

python - 如何使用其他数据框(PySpark)创建数据框?

r - 用于绘制时间序列数据的 x 轴刻度的日期格式

r - 将不均匀的字符串拆分为 R 中的排序列

r - 使用 quantmod 'to.weekly' 函数聚合每日数据会创建以周一而非周五结束的每周数据