是否有R函数对列变量进行排序?

时间:2019-05-19 07:37:29

标签: r

是否有R函数对列变量进行排序?我有一个像下面的列的列表

@Query

默认情况下,R排序为11、110、1100,依此类推。

但是我需要

Col1    11  110   1100    12
   a    1   2     20      22
   b    16  5      3      18

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

如果您只有Col1作为非数字,则可以使用:

df[,c("Col1",as.character(sort(as.numeric(names(df)[-1]),decreasing=F)))]
  Col1 11 12 110 1100
1    a  1 22   2   20
2    b 16 18   5    3

否则:

要添加到@DavidArenburg的注释中,R几乎总是在数字列名称中添加X。麻烦的是,即使您删除了这个X,由于col1的存在使得很难对这些名称进行排序。 dplyr的{​​{1}}与select结合使用可能会更容易,我们在下面使用。

everything

@akrun指出,我们可以通过在df<-read.table(text="Col1 11 110 1100 12 a 1 2 20 22 b 16 5 3 18",header=T) names(df) <- gsub("X","",names(df)) 中设置gsub来跳过check.names=FALSE,即:

read.table

继续 df<-read.table(text="Col1 11 110 1100 12 a 1 2 20 22 b 16 5 3 18",header=T, check.names= FALSE)

dplyr

答案 1 :(得分:1)

基于R的解决方法可能是:

df <- read.table(text = "Col1    11  110   1100    12
a    1   2     20      22
b    16  5      3      18", h = T)

colnames(df)[-1] <- gsub("\\D", "", colnames(df)[-1]) #this step is not necessary if your data does not contain X'es in thecolumn names

df[,c(colnames(df)[1],as.character(sort(as.numeric(colnames(df)[-1]))))]

  Col1 11 12 110 1100
1    a  1 22   2   20
2    b 16 18   5    3

不过,我还是建议考虑@David Arenburg和@NelsonGon的问题。