data.table
行とxe5
約100列があります。NA
値がまたはでない最初の 3 列のインデックスを探しています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
。この回答をすばやく取得する方法を探しています (任意の方法を歓迎します)。