Во фрейме данных я хотел бы получить индекс столбца по имени. Например:
x <- data.frame(foo=c('a','b','c'),bar=c(4,5,6),quux=c(4,5,6))
Я хочу знать индекс столбца для "бара".
Я придумал следующее, но это кажется не элегантным. Есть ли что-то более простое, что мне не хватает?
seq(1,length(names(x)))[names(x) == "bar"]
[1] 2
match("bar",names(x))
также работает, хотяmatch
гораздо полезнее, когда первый аргумент также является вектором.Ответы:
наверное это самый простой способ:
источник
просто чтобы добавить еще одну возможность:
обычно вы можете использовать
grep
и это - потомки (то есть, grepl), чтобы выполнять такие работы более изощренным способом с использованием регулярных выражений.На вашем примере вы можете получить индекс столбца с:
grep("^bar$", colnames(x))
илиgrep("^bar$", names(x))
^
И$
являются мета - символы для начала и конца строки, соответственно.Проверьте? Grep и особенно? Regex для большего количества информации (то есть, вы можете получить только частичные имена / совпадения, или возвращаемое значение - сама строка или логический вектор, ...)
Для меня
grep
это больше R-иш.Сильно связан недавний пакет от Hadley Wickhem: stringr , пакет для «современной последовательной обработки строк», включая функции, подобные grep. Недавно он опубликовал статью об этом в R Journal.
Смотрите также мой ответ на stackoverflow по аналогичной проблеме.
источник