Подтвердить что ты не робот

Найти индекс столбца в кадре данных, который содержит строку как значение

У меня есть такой кадр данных:

df <- data.frame(col1 = c(letters[1:4],"a"),col2 = 1:5,col3 = letters[10:14])
 df
  col1 col2 col3
1    a    1    j
2    b    2    k
3    c    3    l
4    d    4    m
5    a    5    n

Я хочу найти индекс столбца df, который имеет значения, соответствующие строке "a". то есть он должен дать мне 1. Я попытался использовать, который в sapply, но не работает. Кто-нибудь знает, как это сделать без цикла?

4b9b3361

Ответ 1

Что-то вроде этого?

 which(apply(df, 2, function(x) any(grepl("a", x))))

Шаги:

  • С apply перейдите по каждому столбцу
  • Искать, если a находится в этом столбце с grepl
  • Так как мы получаем вектор назад, используйте any для получения TRUE, если любой элемент был сопоставлен с a
  • Наконец, проверка which элементов (столбцов) TRUE (т.е. содержит искомую букву a).

Ответ 2

Поскольку вы упоминаете, что пытались использовать sapply(), но не увенчались успехом, вот как вы можете это сделать:

> sapply(df, function(x) any(x == "a"))
 col1  col2  col3 
 TRUE FALSE FALSE 
> which(sapply(df, function(x) any(x == "a")))
 col1 
    1

Конечно, вы также можете использовать подход grep()/grepl(), если вы предпочитаете сопоставление строк. Вы можете также обернуть функцию which() с помощью unname(), если вам нужен только номер столбца.