Поиск индекса столбца по его имени в R [закрыто]

11

Во фрейме данных я хотел бы получить индекс столбца по имени. Например:

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
patrickmdnet
источник
3
match("bar",names(x))также работает, хотя matchгораздо полезнее, когда первый аргумент также является вектором.
кардинал
Вам действительно нужен индекс столбца? Вы также можете использовать x [, "bar"], чтобы получить весь столбец, аналогично обычному x $ bar. И в обоих случаях подстрочные строки: x [2: 3, «bar»] или x $ bar [2: 3]. Если вам нужно передать индекс подпрограмме, которая требует индекс, это, конечно, не поможет.
Уэйн
Бах, это все портит мои знаки доллара. Суть в том, что есть два способа использовать имя столбца в методе знака доллара и включить его в качестве индекса.
Уэйн
3
Этот вопрос кажется не по теме, потому что он о том, как сделать что-то в R, а не о каких-либо связанных статистических проблемах.
gung - Восстановить Монику

Ответы:

22

наверное это самый простой способ:

which(names(x)=="bar")
kohske
источник
11

просто чтобы добавить еще одну возможность:
обычно вы можете использовать grepи это - потомки (то есть, grepl), чтобы выполнять такие работы более изощренным способом с использованием регулярных выражений.

На вашем примере вы можете получить индекс столбца с:

grep("^bar$", colnames(x)) или grep("^bar$", names(x))

^И $являются мета - символы для начала и конца строки, соответственно.

Проверьте? Grep и особенно? Regex для большего количества информации (то есть, вы можете получить только частичные имена / совпадения, или возвращаемое значение - сама строка или логический вектор, ...)

Для меня grepэто больше R-иш.

Сильно связан недавний пакет от Hadley Wickhem: stringr , пакет для «современной последовательной обработки строк», включая функции, подобные grep. Недавно он опубликовал статью об этом в R Journal.

Смотрите также мой ответ на stackoverflow по аналогичной проблеме.

Хенрик
источник