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

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

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 개의 변수로 거대합니다. 따라서 프로세스는 더 자동화되어야합니다.



답변

당신이 사용할 수있는 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, 원하는 열 순서를 포함하는 대상 벡터에 대해 데이터 프레임을 만들 수 있습니다 .


답변

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

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


답변

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")]


답변

  test[,sort(names(test))]

열 이름 정렬은 쉽게 작동 할 수 있습니다.


답변

하나 이상의 열만 앞에두고 나머지 순서는 신경 쓰지 않는 경우 :

require(dplyr)
test %>%
  select(B, everything())


답변

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

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


답변

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

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

# [1] V1 V3 V11