我有一个data.table
行xe5
和大约 100 列。我正在寻找前 3 列索引,使得值不是NA
or 0
。
m <- matrix(rep(NA_integer_, 1e6), ncol=10)
for(i in 1:nrow(m)){
set.seed(i);
m[i, sample(1:10, 5)] = 1L:5L
}
DT <- data.table(m);
DT
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1: NA 5 1 2 3 NA 4 NA NA NA
2: NA 1 NA NA 3 5 2 NA NA 4
3: NA 1 4 3 NA NA NA 2 5 NA
4: 2 4 3 NA 5 1 NA NA NA NA
5: 5 4 1 NA NA NA 2 3 NA NA
---
99996: NA NA 2 3 5 1 NA NA 4 NA
99997: 2 NA NA NA 1 NA NA 3 5 4
99998: 5 NA 4 2 NA 1 3 NA NA NA
99999: NA 5 NA 1 NA 4 NA 2 NA 3
100000: 5 NA NA NA 2 3 1 NA NA 4
f <- function(x){return(list(which(!is.na(x) & x!=0L)[1:3L]))}
#Here is what apply do
system.time(test <- apply(m, FUN=f, MAR=1))
utilisateur système écoulé
1.30 0.00 1.29
我发现它很慢,这可能不是任务data.table
,我正在寻找一种快速获得此答案的方法(欢迎任何方法)。