【发布时间】:2015-05-06 19:57:13
【问题描述】:
我想删除 data.table 的任何列中包含 Inf 的所有行。到目前为止,我一直在使用这种方法:
DT <- data.table(col1 = c(1,2,3), col2 = c(4,Inf,5))
DT[,drop := apply(.SD, 1, function(x) any(is.infinite(x))), by = 1:nrow(DT)]
DT <- DT[(!drop)][,drop:=NULL]
来自this Stackoverflow question。但是,这种方法不能很好地扩展到大量数据。有没有更好的方法来删除带有Inf 的行?
【问题讨论】:
-
可能是
DT[DT[, Reduce('&', lapply(.SD, is.finite))]] -
有趣的是 (?),当 @akrun 解决方案有效时,OP 给出的示例不适用于 1.9.5 版。
-
为什么不使用
rowSums:DT[is.finite(rowSums(DT))] -
相关:在
data.tablestackoverflow.com/a/10791729/1191259 中通过引用删除行可能有朝一日是可行的
标签: r data.table