Пошук індексу стовпця за його назвою в R [закрито]


11

У кадрі даних я хотів би отримати індекс стовпця за назвою. Наприклад:

x <- data.frame(foo=c('a','b','c'),bar=c(4,5,6),quux=c(4,5,6))

Я хочу знати індекс стовпців для "bar".

Я придумав наступне, але це здається не елегантним. Чи є більш простий вбудований, який я пропускаю?

seq(1,length(names(x)))[names(x) == "bar"]
[1] 2

3
match("bar",names(x))також працює, хоча matchнабагато корисніше, коли перший аргумент також є вектором.
кардинал

Чи дійсно вам потрібен індекс стовпця? Ви також можете використовувати x [, "bar"], щоб отримати весь стовпець, подібний до звичайного x $ bar. І в обох випадках підпишіть рядки: x [2: 3, "bar"] або x $ bar [2: 3]. Якщо вам потрібно подати індекс до звичайної програми, яка вимагає індексу, це, звичайно, не корисно.
Уейн

Ба, це постійно псує мої знаки долара. Суть полягає в тому, що є два способи використання імені стовпця методом знака долара та включення його в якості підписника.
Уейн

3
Це питання видається поза темою, оскільки йдеться про те, як зробити щось у R, а не про будь-які пов'язані зі статистичними питаннями.
gung - Відновити Моніку

Відповіді:



11

просто додати ще одну можливість:
Зазвичай ви можете використовувати grepта її decedents (тобто grepl, виконувати такі завдання більш складнішим способом, використовуючи регулярні вирази.

У вашому прикладі ви могли отримати індекс стовпців за допомогою:

grep("^bar$", colnames(x)) або grep("^bar$", names(x))

^І $є мета - символи для початку і кінця рядка, відповідно.

Перевірте? Grep і особливо? Regex для більшої кількості інформації (тобто ви можете захоплювати лише часткові імена / відповідники, або зворотним значенням є сам рядок або логічний вектор, ...)

Для мене grepце більше R-ish.

Сильно пов'язаний останній пакет Hadley Wickhem: stringr , пакет для "сучасної, послідовної обробки рядків", включаючи функції, подібні до grep. Нещодавно він опублікував доповідь про це в журналі R.

Дивіться також мою відповідь про stackoverflow на ідентичне питання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.