【发布时间】:2015-02-12 19:56:20
【问题描述】:
我在 data.table 中有一个包含 8,000,000 行和 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()一样或者更少吗?
【问题讨论】:
-
这实际上是一个有趣的问题,因为
max是原始函数,应该非常高效。不过,如果您能提供一些最低限度的可重现示例,那就太好了。另外,pmxid只是一个行号吗?一般来说,data.table在用于每行操作时没有太大优势。 -
@mattdevlin
max.colfrombase R非常快。indx <- max.col(df, ties.method='first'); df[cbind(1:nrow(df), indx)]获取每行的最大值 -
@DavidArenburg: pmxid 只是一个数字 id,但它们与行号不匹配
-
你写了“我可以快速得到哪一列的最大值每一行使用...”
-
如果您只需要一个新列,则不需要
dt <- dt[,x:=y,by=z]中的<-分配。您可能想查看包的介绍材料:github.com/Rdatatable/data.table/wiki/Getting-started
标签: r data.table