2015-06-05 5 views
0

У нас есть data.frame здесь:Extract имя столбца в вектор, вызвав имя столбца

df <- data.frame(x1=rnorm(20),x2=rnorm(20),x3=rnorm(20),x4=rnorm(20),x5=rnorm(20),x6=rnorm(20),x7=rnorm(20),x8=rnorm(20),x9=rnorm(20),x10=rnorm(20),x11=rnorm(20),x12=rnorm(20),x13=c(2,1,1,2,2,1,2,1,2,2,1,1,2,1,2,2,1,2,1,1)) 

Я знаю, что могу просматривать имена столбцов легко с

colnames(df) 
[1] "x1" "x2" "x3" "x4" "x5" "x6" "x7" "x8" "x9" "x10" "x11" "x12" "x13" 

который печатает строку выше.

Я также могу получить имя одного столбца с colnames(df[...]), для примера

colnames(df[2]) 
[1] "x2" 

Я не могу показаться, чтобы выяснить, как извлечь одно имя столбца, вызвав colnames() с именем из колонка, как

colnames(df$x2) 
NULL 

небось решение до смешного просто, но я просто не нашел никакой полезной информации по этому вопросу.

+0

Может 'COLNAMES (ДФ [ "x2"])'? – nicola

+0

Точно. Спасибо. Я не понимаю, как я это пропустил, так как я клянусь, я пробовал это, когда я проверял все возможные способы. Скорее всего, я сделал что-то не так ...: D –

+1

@nicola предоставил полезный код, но в чем смысл такого вопроса? Мне непонятно, чего вы пытаетесь достичь. Скажем, это звучит так: «Что такое имя этого парня (колонка) под названием« Джон »? – SabDeM

ответ

2

Одиночные скобки создают подмножество кадра данных только с одним столбцом. Поэтому новый кадр данных имеет имя для своего единственного столбца.

> class(df[2]) 
[1] "data.frame" 
> colnames(df[2]) 
[1] "x2" 

Двойные скобки [[ или доллар $ извлекает содержимое из одного столбца, который в вашем случае является числовым. Поэтому он не имеет имен столбцов, потому что это не кадр данных.

> class(df$x2) 
[1] "numeric" 

Если вы хотите, чтобы имя только второго столбца вы должны сделать

> colnames(df)[2] 
[1] "x2" 
Смежные вопросы