data.table
x
열 이름의 문자형 벡터가 주어지면 에서 열을 재정렬하고 싶습니다 neworder
.
library(data.table)
x <- data.table(a = 1:3, b = 3:1, c = runif(3))
neworder <- c("c", "b", "a")
분명히 할 수 있습니다.
x[ , neworder, with = FALSE]
# or
x[ , ..neworder]
# c b a
# 1: 0.8476623 3 1
# 2: 0.4787768 2 2
# 3: 0.3570803 1 3
그러나 전체 데이터 세트를 다시 복사해야합니다. 이를 수행하는 다른 방법이 있습니까?
답변
사용 setcolorder()
:
library(data.table)
x <- data.table(a = 1:3, b = 3:1, c = runif(3))
x
# a b c
# [1,] 1 3 0.2880365
# [2,] 2 2 0.7785115
# [3,] 3 1 0.3297416
setcolorder(x, c("c", "b", "a"))
x
# c b a
# [1,] 0.2880365 3 1
# [2,] 0.7785115 2 2
# [3,] 0.3297416 1 3
에서 ?setcolorder
:
에
data.table
, 모든set*
함수는 참조로 입력을 변경합니다. 즉, 하나의 열만큼 큰 임시 작업 메모리 외에는 복사가 전혀 이루어지지 않습니다.
꽤 효율적이어야합니다. 자세한 내용은 ?setcolorder
을 참조하십시오.
답변
위의 솔루션을 사용하는 것이 더 쉬울 수 있지만 대신 열 번호로 정렬합니다. 예 : library (data.table)
> x <- data.table(a = 1:3, b = 3:1, c = runif(3))
> x
a b c
[1,] 1 3 0.2880365
[2,] 2 2 0.7785115
[3,] 3 1 0.3297416
> setcolorder(x, c(3,2,1))
> x
c b a
[1,] 0.2880365 3 1
[2,] 0.7785115 2 2
[3,] 0.3297416 1 3