Ответ 1
which( colnames(df)=="b" )
Должно это сделать.
Возможный дубликат:
Получить индекс столбца от метки в кадре данных
Мне нужно получить номер столбца с его именем.
Предположим, что у нас есть следующий файл данных:
df <- data.frame(a=rnorm(100),b=rnorm(100),c=rnorm(100))
Мне нужна функция, которая будет работать следующим образом:
getColumnNumber(df,"b")
И он вернет
[1] 2
Есть ли такая функция?
Спасибо!
which( colnames(df)=="b" )
Должно это сделать.
Один быстрый и аккуратный метод:
> match("b",names(df))
[1] 2
Это позволяет избежать векторного сканирования, выполняемого ==
и which
. Если у вас много столбцов, и вы делаете это много, вам может понравиться пакет fastmatch.
> require(fastmatch)
> fmatch("b",names(df))
[1] 2
fmatch
быстрее, чем match
, но при последующих вызовах он не только быстрее, но и мгновенно.
Другим методом, который лучше обобщает задачи неточного сопоставления, является использование grep
:
grep("^b$", colnames(df) )
Если вы хотите, чтобы число всех имен столбцов, начинающихся с "b", удалялось, вы пишете:
df[ , - grep("^b", colnames(df) )]
Это аккуратно устраняет проблему, из-за которой вы не можете использовать отрицательную индексацию с символьными векторами.
.. особенно, если вам нужно получить несколько индексов столбцов, применяется подход ниже:
> 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