gpt4 book ai didi

数据表中的最大行数

转载 作者:行者123 更新时间:2023-12-04 07:36:52 25 4
gpt4 key购买 nike

我有一个8,000,000行的数据集,在data.table中有100列,其中每一列都是一个计数。我需要找到每一行的最大计数以及该最大值所在的列。

我可以使用以下方法快速获取每一行的最大值

dt <- dt[, maxCol := which.max(.SD), by=pmxid]

但是尝试使用
dt <- dt[, nmax := max(.SD), by=pmxid]

非常慢我将其运行了将近20分钟,并且仅计算出200,000行的最大值。查找最大列大约需要花费时间。所有8,000,000行的2分钟。

为何找到这么多最大值需要这么长时间?它不应该与 which.max()花费更少的时间吗?

最佳答案

虽然,您正在寻找data.table解决方案,但这是一种base R解决方案,对于您的数据集来说足够快了。

indx <- max.col(df, ties.method='first')
df[cbind(1:nrow(df), indx)]
在稍大的数据集上,显示了 system.time比较
system.time({
indx <- max.col(df1, ties.method='first')
res <- df1[cbind(1:nrow(df1), indx)]
})
# user system elapsed
# 2.180 0.163 2.345



df1$pmxid <- 1:nrow(df1)
dt <- as.data.table(df1)
system.time(dt[, nmax:= max(.SD), by= pmxid])
# user system elapsed
#1265.792 2.305 1267.836
base R方法要比帖子中的 data.table方法更快。
数据
set.seed(24)
df <- as.data.frame(matrix(sample(c(NA,0:20), 20*10,
replace=TRUE), ncol=10))
#if there are NAs, change it to lowest number
df[is.na(df)] <- -999

set.seed(585)
df1 <- as.data.frame(matrix(sample(c(NA,0:20), 100*1e6,
replace=TRUE), ncol=100))
df1[is.na(df1)] <- -999

关于数据表中的最大行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28486654/

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