2017-11-08 2 views
1

데이터 프레임을 열 이름으로 정렬 할 때 이상한 동작을 관찰하고 있습니다. 기본적으로 데이터 프레임에 하나의 열만 있으면 순서에 따라 열 이름이 손실되지만 여러 열이 있으면 발생하지 않습니다. 이 샘플 코드 :데이터 프레임을 R 열로 정렬

df <- data.frame(c("1", "2", "3"), c("4", "5", "6"), c("7", "8", "9")) 
colnames(df) <- c("A", "C", "B") 
df <- data.frame(df[,order(colnames(df))]) 
print(colnames(df)) 


df <- data.frame(c("1", "2", "3")) 
colnames(df) <- c("A") 
df <- data.frame(df[,order(colnames(df))]) 
print(colnames(df)) 

코드, 데이터 프레임 df의 첫 번째 부분에서는, 그 열을 유지하지만, 두 번째 부분에 열 이름을 잃는다.

분명히 하나의 열만 있으면 열 수를 확인하고 이름을 다시 가져올 수 있지만 나쁜 것처럼 보입니다.

누구든지 문제를 해결할 수있는 더 좋은 방법을 알고 있습니까?

+7

좋은 오래된'drop' 문제. –

+4

이 인스턴스의 더 나은 방법은리스트 구문을 사용하는 것입니다 :'df [order (colname (df))]' 'df [order (colnames (df))]]는 하나의 열 data.frame의 인스턴스에리스트 구조를 드롭하는 반면,리스트 구조와 관련된 이름들을 보존 할 것이다. – lmo

답변

0

당신은 tibble 대신 data.frame 사용할 수 있습니다

는 는
library(tibble) 
df <- tibble(c("1", "2", "3"), c("4", "5", "6"), c("7", "8", "9")) 
colnames(df) <- c("A", "C", "B") 
df <- df[,order(colnames(df))] 
print(colnames(df)) 


df <- tibble(c("1", "2", "3")) 
colnames(df) <- c("A") 
df <- df[,order(colnames(df))] 
print(colnames(df)) 
+2

누구나 패키지를 설치하고 쉬운 작업을 위해 데이터 구조를 변경해야하는 이유는 무엇입니까? –

+0

사실이에요. 그러나 내가하는 것처럼 항상 너를 사용하면이 문제가 발생하지 않는다. 하지만 어쩌면 다른 사람들이 ;-) – Tino

+1

이 경우 더 이상'data.frame()'이 필요하지 않습니다.'df <- df [, order (colnames (df))]'는 잘 작동해야합니다. – ANG

0
는 하나는 열 최초의 코멘트에
df %>% select_(.dots = sort(colnames(df))) 
0

Coutesy 앙드레 Elrico의

주문을 선택 사용할 수 있습니다, 가장 정직 솔루션 보인다

방울을 사용하는 것 :

관련 문제