2017-11-18 169 views
0

設置數據幀在更改列名稱後,在R dataframes中使用順序失敗。我該如何恢復?

mta<-c("ldall","nold","ldall","nold","ldall","nold","ldall","nold") 
mtb<-c(491, 28581,241,5882,365,7398,512,10887) 
df1<-data.frame(mta,mtb) 

我可以爲了我以正常方式數據幀。這工作正常。

df1[order(mtb),] 

但如果我更改列

names(df1)<-c("mta1","mtb1") 
df1[order(mtb1),] 

的名字這給了錯誤的順序(mtb1)

錯誤:對象'mtb1找不到。

如果我在它的工作指令中使用舊的列名稱,雖然輸出顯示新的列名稱。

df1[order(mtb),] 

如果我將名稱更改回原來的名稱,則該命令顯示正常工作。誰能解釋一下?是order使用列名的隱藏版本?

+1

'mtb'的工作原理是因爲您已將它定義爲全局環境中的矢量。另一方面,'mtb1'只是數據框中的一列。所以你需要的是'df1 [order(df1 $ mtb1),]' – Sotos

回答

0

這應該工作。讓我知道這是否有幫助。

mta<-c("ldall","nold","ldall","nold","ldall","nold","ldall","nold") 
mtb<-c(491, 28581,241,5882,365,7398,512,10887) 
df1<-data.frame(mta,mtb) 

# Change column names 
colnames(df1) <- c("mta1","mtb1") 

# Sort column mtb1 from the data frame 
df1[order(df1$mtb1), ] 

    mta1 mtb1 
3 ldall 241 
5 ldall 365 
1 ldall 491 
7 ldall 512 
4 nold 5882 
6 nold 7398 
8 nold 10887 
2 nold 28581