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

Получить номер столбца в R, если имя столбца

Возможный дубликат:
Получить индекс столбца от метки в кадре данных

Мне нужно получить номер столбца с его именем.

Предположим, что у нас есть следующий файл данных:

df <- data.frame(a=rnorm(100),b=rnorm(100),c=rnorm(100))

Мне нужна функция, которая будет работать следующим образом:

getColumnNumber(df,"b")

И он вернет

[1] 2

Есть ли такая функция?

Спасибо!

4b9b3361

Ответ 1

which( colnames(df)=="b" )

Должно это сделать.

Ответ 2

Один быстрый и аккуратный метод:

> match("b",names(df))
[1] 2

Это позволяет избежать векторного сканирования, выполняемого == и which. Если у вас много столбцов, и вы делаете это много, вам может понравиться пакет fastmatch.

> require(fastmatch)
> fmatch("b",names(df))
[1] 2

fmatch быстрее, чем match, но при последующих вызовах он не только быстрее, но и мгновенно.

Ответ 3

Другим методом, который лучше обобщает задачи неточного сопоставления, является использование grep:

grep("^b$", colnames(df) )

Если вы хотите, чтобы число всех имен столбцов, начинающихся с "b", удалялось, вы пишете:

df[ , - grep("^b", colnames(df) )]

Это аккуратно устраняет проблему, из-за которой вы не можете использовать отрицательную индексацию с символьными векторами.

Ответ 4

.. особенно, если вам нужно получить несколько индексов столбцов, применяется подход ниже:

> df <- data.frame(a=rnorm(100),b=rnorm(100),c=rnorm(100))
> which(names(df)%in%c("b", "c"))
[1] 2 3

если вы используете это для подмножества df, вам не нужно, чтобы()

> df_sub <- df[, names(df)%in%c("b", "c")]
> head(df_sub)
           b          c
1  0.1712754  0.3119079
2 -1.3656995  0.7111664
3 -0.2176488  0.7714348
4 -0.6599826 -0.3528118
5  0.4510227 -1.6438053
6  0.2451216  2.5305453