2017-11-18 168 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