Цель : Найти индекс столбца первого появления в файле * как эксель Ctrl + F
# EXPECTED RESULT -- INDEX
[1] 2
# SAMPLE DT
DT <- data.table(A = c(NA,NA,NA,NA,NA),
B = c(NA,"APPLE",NA,NA,NA),
C = c(NA,NA,NA,NA,NA),
D = c(NA,NA,NA,"APPLE",NA))
lx <- grep("^APPLE$", sapply(colnames(DT), function(x) grep("^APPLE$",DT[,x],value = TRUE)))[1]
CURRENT METHOD
lx <- grep("^APPLE$", sapply(colnames(DT), function(x) grep("^APPLE",setDF(DT)[,x],value = TRUE)))[1]
Проблема это не работает, если не установлено setDF()
Error in `[.data.table`(DT, , x) :
j (the 2nd argument inside [...]) is a single symbol but column name 'x' is not found. Perhaps you intended DT[, ..x]. This difference to data.frame is deliberate and explained in FAQ 1.1.
Как получить ожидаемый результат, не переключаясь на data.frame (без setDF())?





Мы перебираем подмножество Data.table (.SD), проверяем, есть ли any ИСТИННЫЕ значения из grepl вывода в каждом столбце, unlist и оборачиваем which
DT[, which(unlist(lapply(.SD, function(x) any(grepl( "^APPLE", x)))))[[1]]]
#[1] 2
Параметр base R с полным соответствием строки будет colSums на логической матрице.
which.max(unname(colSums(DT == "APPLE", na.rm = TRUE)))
#[1] 2
Это именно то, что мне нужно, но не в документе, круто