데이터 프레임의 레이블에서 열 인덱스 가져 오기


79

다음 데이터 프레임이 있다고 가정합니다.

> df
  A B C
1 1 2 3
2 4 5 6
3 7 8 9

색인에서 'B'열을 선택할 수 있습니다.

> df[,2]
[1] 2 5 8

열 레이블 ( 'B')에서 인덱스 (2)를 얻는 방법이 있습니까?


2
: 최고의 솔루션 여기 matthewdowle의 답변을 @ 참조하십시오 stackoverflow.com/a/9277935/636656
아리 B. 프리드먼

답변:


109

당신은을 통해 인덱스를 얻을 수 grepcolnames:

grep("B", colnames(df))
[1] 2

또는 사용

grep("^B$", colnames(df))
[1] 2

"ABC"와 같이 B를 포함하지 않고 "B"라는 열만 가져옵니다.


1
원래 예제의 장점은 df [, grep ( "^ B", colnames (df))], 즉 "B"로 시작하는 데이터 프레임 열을 반환하는 것과 같이 사용을 보여 주면 코드에서 입증 될 수 있습니다. 동의하면 추가 편집에 자유롭게 사용하십시오.
IRTFM 2010

2
또는 df [, grep ( "^ [BC]", colnames (df))], 즉 B 또는 C로 시작하는 열입니다.
IRTFM

@Dwin : @aix가 이미 말했듯이, 질문자는 인덱스를 원합니다 . 그러나 나는 또한 grep당신이 그것을 설명하는 방식을 일반적으로 사용 합니다.
Henrik

@ 헨릭. 정말 고맙습니다. 이것은 dplyr 및 변수로 작업하는 데 가장 유용한 단일 명령이어야합니다!
user989762

86

다음이 수행합니다.

which(colnames(df)=="B")

2
문제 grep는 또한 장점입니다. 즉, 정규식을 사용한다는 것입니다 (따라서 열 이름에서 모든 패턴을 검색 할 수 있음). colnames "B"를 얻으려면 "^B$"grep의 패턴으로 사용 하십시오. ^는 문자열의 시작을 나타내는 메타 문자이고 $는 문자열의 끝입니다.
Henrik

9
당신은조차 필요하지 않습니다 which. 직접 사용할 수 있습니다df[names(df)=="B"]
nico

4
@nico 문제는 열의 인덱스 를 얻는 것 입니다.
NPE

"Which"는 모든 경우에 저에게 효과적이었습니다. grep을 사용하여 "fBodyAcc-meanFreq ()-Z"라는 이름의 열을 가져올 수 없습니다.
Panos Kal.

1
@Kabamaru : Grep은 메타 문자를 이스케이프하는 한 작동합니다. 당신이 준 예의 경우 다음과 같이 작동합니다. grep("^fBodyAcc-meanFreq\\()-Z$",colnames(df))또는 grep("^fBodyAcc-meanFreq\\(\\)-Z$",colnames(df)).
Steve

7

복잡한 열 재 배열 이 필요했기 때문에 colname에 대한 모든 인덱스를보고 싶었 기 때문에 colname을 데이터 프레임으로 인쇄했습니다. 행 이름은 인덱스입니다.

as.data.frame(colnames(df))

1 A
2 B
3 C

1
이를 수행하는 더 간결한 방법은 cbind(names(df)).
lillemets

6

의 chimeric의 답변 에서 다음을 따르십시오 .

얻으려면 모든 열 인덱스를DF 내가 사용하므로 :

which(!names(df)%in%c()) 

또는 목록에 저장 :

indexLst<-which(!names(df)%in%c())

1
나는 그것이 일반화 될 수 있기 때문에 이것이 가장 좋은 대답이라고 생각
드미트리 Zacharatos

2

이것은 열 번호로 변수를 나열하는 효율적인 방법 인 것 같습니다.

cbind(names(df)) 

산출:

     [,1]
[1,] "A" 
[2,] "B" 
[3,] "C" 

때로는 위치가있는 변수를 코드에 복사하여이 함수를 사용합니다.

varnums<- function(x) {w=as.data.frame(c(1:length(colnames(x))),
          paste0('# ',colnames(x)))
names(w)= c("# Var/Pos")
w}
varnums(df)

산출:

# Var/Pos
# A         1
# B         2
# C         3


0

사용 t기능 :

t(colnames(df))

     [,1]   [,2]   [,3]   [,4]   [,5]   [,6]  
[1,] "var1" "var2" "var3" "var4" "var5" "var6"

0

다음은 Henrik의 대답을 일반화하는 대답입니다.

df=data.frame(A=rnorm(100), B=rnorm(100), C=rnorm(100))
numeric_columns<-c('A', 'B', 'C')
numeric_index<-sapply(1:length(numeric_columns), function(i)
grep(numeric_columns[i], colnames(df))) 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.