Как принять результат Саппли в data.table пути R? - PullRequest
1 голос
/ 16 мая 2019

Цель : Найти индекс столбца первого появления в файле * как в Excel 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())?

1 Ответ

2 голосов
/ 16 мая 2019

Мы перебираем подмножество 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...