r: итерация по всем элементам нескольких столбцов для обнаружения фразы - PullRequest
1 голос
/ 27 марта 2020

Я пытаюсь l oop через несколько столбцов в кадре данных, которые содержат текстовые файлы.

Я хочу проверить каждую запись столбцов с 7 по 16, чтобы увидеть, содержит ли какой-либо из текстовых файлов определенную фраза.

каждый раз, когда фраза обнаружена, я хочу увеличить количество раз, когда она появилась, на 1.

это кажется довольно простым. я думаю, что я должен перебирать столбцы и строки, но я просто не могу понять, как именно это сделать.

какие-либо предложения? заранее благодарю за понимание.

fc_count <- 0

for (col in profiles[7:16]){
  for (row in 1:nrow(profiles)){

    if(isTRUE(grepl("my name is jeff", row)) == TRUE){

      fc_count = fc_count + 1

    }

  }

}

fc_count

1 Ответ

1 голос
/ 27 марта 2020

Мы можем использовать lapply до l oop над столбцами с 7 по 16, применить grepl, с pattern, чтобы получить list логических векторов, Reduce, это одно целое число вектор путем добавления (+), а затем получить общее значение на sum

sum(Reduce(`+`, lapply(profiles[7:16], grepl, pattern = "my name is jeff")))

Поскольку grepl векторизовано для vector, если мы преобразуем «data.frame» к matrix (a matrix - это вектор с dim-атрибутами), он более компактен

sum(grepl("my name is jeff", as.matrix(profiles[7:16])))

Кроме того, с for циклами нам не нужны вложенные циклы как grepl векторизовано

fc_count <- 0
for(prf in profiles[7:16]){
    fc_count <- fc_count + sum(grepl("my name is jeff", prf))
 }
...