열 이름으로 데이터 프레임의 열 정렬


93

이것은 아마도 간단한 질문 일 수 있지만 열을 알파벳순으로 정렬하는 방법을 모릅니다.

test = data.frame(C = c(0, 2, 4, 7, 8), A = c(4, 2, 4, 7, 8), B = c(1, 3, 8, 3, 2))

#   C A B
# 1 0 4 1
# 2 2 2 3
# 3 4 4 8
# 4 7 7 3
# 5 8 8 2

나는 열 이름을 알파벳순으로 정렬하여

#   A B C
# 1 4 1 0
# 2 2 3 2
# 3 4 8 4
# 4 7 3 7
# 5 8 2 8

다른 사람들에게는 내 자신의 정의 된 순서를 원합니다.

#   B A C
# 1 4 1 0
# 2 2 3 2
# 3 4 8 4
# 4 7 3 7
# 5 8 2 8

내 데이터 세트는 10000 개의 변수로 거대합니다. 따라서 프로세스는 더 자동화되어야합니다.

답변:


137

당신이 사용할 수있는 ordernames, 그리고 부분 집합 열을 주문하는 것을 사용합니다

test[ , order(names(test))]
  A B C
1 4 1 0
2 2 3 2
3 4 8 4
4 7 3 7
5 8 2 8

자신이 정의한 주문의 경우 주문에 대한 이름 매핑을 정의해야합니다. 이것은 당신이 이것을 어떻게하고 싶은지에 달려 있지만, 어떤 기능을 order위와 바꾸면 원하는 결과를 얻을 수 있습니다.

예를 들어 원하는 순서를 지정하는 대상 벡터에 따라 데이터 프레임의 행 정렬을 살펴볼 수 match있습니다. 즉 names, 원하는 열 순서를 포함하는 대상 벡터에 대해 데이터 프레임을 만들 수 있습니다 .


3
자세히 설명하기 위해 test [, c (2,3,1)] 또는 test [, c ( 'A', 'B', 'C')]는 A, B, C 열 순서를 생성합니다. "["연산자는 사용자가 원하는 작업을 매우 영리하게 파악합니다.
Carl Witthoft 2011 년

2
감사합니다. 제공된 도움으로 두 번째 질문을 알아 냈습니다. myorder = c ( "B", "A", "C"), test [, myorder]
John Clark

원하는 방식으로 열을 정렬하는 방법이 있습니까 (예 : CAB)?
TYZ

data.frame이 목록이라는 사실을 활용하여 더 간단하게 만들 수 있습니다. test[ order(names(test)) ]
data.frame

1
없음 @naco의 소스를 읽어 colnames: 그것은 호출 끝 namesA에 대한 data.frame.
제임스

27

dplyr누군가가 파이프로 이것을하고 싶어하는 경우에 대한 필수 답변이 있습니다.

test %>% 
    select(sort(names(.)))

4
나를 위해 이것은 내가 원하는 변수를 먼저 선택하는 것이 쉽기 때문에 잘 작동했습니다. 원본 df를 test%>%select(b,sort(names(.)))
고수

@Silentdevildoll 멋진 응용 프로그램입니다! 나는 그것을 생각하지 않았다.
Andrew Brēza

14
test = data.frame(C=c(0,2,4, 7, 8), A=c(4,2,4, 7, 8), B=c(1, 3, 8,3,2))

다음과 같은 간단한 함수 교체를 사용하여 수행 할 수 있습니다 (그러나 데이터 프레임에 열이 많지 않은 경우에만 해당).

test <- test[, c("A", "B", "C")]

타인을 위해:

test <- test[, c("B", "A", "C")]



2

따라서 특정 열이 먼저 나오고 나머지는 알파벳순으로 표시되도록이 솔루션을 제안합니다.

test[, c("myFirstColumn", sort(setdiff(names(test), "myFirstColumn")))]

두 개 이상의 열이 첫 번째가되도록하려면 어떻게해야합니까?
Maksym Moroz

2

다른 옵션은 인수와 함께 str_sort()라이브러리 stringr 에서 사용하는 것 numeric = TRUE입니다. 알파벳순이 아닌 숫자가 포함 된 열을 올바르게 정렬합니다 .

str_sort(c("V3", "V1", "V10"), numeric = TRUE)

# [1] V1 V3 V11


1

위의 다른 구문과 유사하지만 학습용-열 이름으로 정렬 할 수 있습니까?

sort(colnames(test[1:ncol(test)] ))

[1:ncol(test)]이 쓸 수있는 단지 더 이상 방법, 여기에 아무것도하지 않습니다 sort(colnames(test)).
Gregor Thomas

0

다음은 내 데이터 세트로 비슷한 문제를 해결하기 위해 찾은 것입니다.

먼저 James가 위에서 언급 한 것을 수행하십시오.

test[ , order(names(test))]

둘째, dplyr의 everything () 함수를 사용하여 데이터 프레임의 시작 부분에서 관심있는 특정 열 (예 : "D", "G", "K")을 이동하고 해당 열 뒤에 알파벳 순서로 정렬 된 열을 배치합니다.

select(test, D, G, K, everything())

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.