gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 09:00:29 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com