programing

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

abcjava 2023. 7. 15. 00:29
반응형

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

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

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개의 변수를 가진 거대한 데이터셋입니다.따라서 프로세스가 더욱 자동화되어야 합니다.

사용할 수 있습니다.order에서names부분 집합을 설정할 때 열 순서를 지정하는 데 사용합니다.

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

다른 옵션은 다음을 사용하는 것입니다.str_sort()라이브러리 stringr에서, 인수와 함께.numeric = TRUE이렇게 하면 숫자가 포함된 열이 알파벳 순으로 정렬되지 않습니다.

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

# [1] V1 V3 V10

  test[,sort(names(test))]

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

앞에 하나 이상의 열만 표시하고 나머지 열의 순서는 상관하지 않는 경우:

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

따라서 특정 열이 먼저 오고 나머지 열이 알파벳 순으로 오면 다음과 같은 해결책을 제안할 수 있습니다.

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

다음은 제 데이터 세트에서 유사한 문제를 해결하기 위해 발견한 것입니다.

첫째, 위에 제임스가 언급한 것을 실행합니다.

test[ , order(names(test))]

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

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

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

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

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

또 다른 방법은..

mtcars %>% dplyr::select(order(names(mtcars)))

data.table기능을 사용할 수 있습니다.setcolorder:

setcolor는 참조를 통해 data.table 열을 제공된 새 순서로 재정렬합니다.

다음은 재현 가능한 예입니다.

library(data.table)
test = data.table(C = c(0, 2, 4, 7, 8), A = c(4, 2, 4, 7, 8), B = c(1, 3, 8, 3, 2))
setcolorder(test, c(order(names(test))))
test
#>    A B C
#> 1: 4 1 0
#> 2: 2 3 2
#> 3: 4 8 4
#> 4: 7 3 7
#> 5: 8 2 8

reprex 패키지(v2.0.1)에 의해 2022-07-10에 생성되었습니다.

언급URL : https://stackoverflow.com/questions/7334644/sort-columns-of-a-dataframe-by-column-name

반응형