r - 对 data.table 进行高效的逐行操作

标签 r data.table

我需要找到许多 (+60) 相对较大的逐行最小值 data.frame (~ 250,000 x 3)(或者我可以等效地处理 xts )。

set.seed(1000)
my.df <- sample(1:5, 250000*3, replace=TRUE)
dim(my.df) <- c(250000,3)
my.df <- as.data.frame(my.df)
names(my.df) <- c("A", "B", "C")

数据框my.df看起来像这样
> head(my.df)

  A B C
1 2 5 2
2 4 5 5
3 1 5 3
4 4 4 3
5 3 5 5
6 1 5 3

我试过
require(data.table)
my.dt <- as.data.table(my.df)

my.dt[, row.min:=0]  # without this: "Attempt to add new column(s) and set subset of rows at the same time"
system.time(
  for (i in 1:dim(my.dt)[1]) my.dt[i, row.min:= min(A, B, C)]
)

在我的系统上,这需要大约 400 秒。它有效,但我不相信这是最好的使用方式 data.table .
我在用 data.table正确吗?有没有更高效的
进行简单的逐行操作的方法?

最佳答案

或者,只是 pmin .

my.dt <- as.data.table(my.df)
system.time(my.dt[,row.min:=pmin(A,B,C)])
# user  system elapsed 
# 0.02    0.00    0.01 
head(my.dt)
#      A B C row.min
# [1,] 2 5 2       2
# [2,] 4 5 5       4
# [3,] 1 5 3       1
# [4,] 4 4 3       3
# [5,] 3 5 5       3
# [6,] 1 5 3       1

关于r - 对 data.table 进行高效的逐行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7885147/

相关文章:

r - 函数内的ggplot2变量

c++ - 在 Rcpp 中使用其他包中的 C 函数

r - 在 R 中获得图边距

r - 在 R 中缩放 data.table 列的子集

r - 如何通过引用更改每个组中的最后一个值,在 data.table

r - 使用 "wildcards"对 data.table 中的行进行子集化

r - 如何正确使用K近邻?

r - 将函数应用于具有 data.table [R] 中的条件的每一列

r - 如何在 data.table 中编写累积计算

r - R 中的 pwr.chisq.test 错误