Найти индекс столбца в кадре данных, который содержит строку как значение
У меня есть такой кадр данных:
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, но не работает.
Кто-нибудь знает, как это сделать без цикла?
Ответы
Ответ 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()
, если вам нужен только номер столбца.