我需要找到许多 (+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/