是否有R函数对列变量进行排序?我有一个像下面的列的列表
@Query
默认情况下,R排序为11、110、1100,依此类推。
但是我需要
Col1 11 110 1100 12
a 1 2 20 22
b 16 5 3 18
有没有办法做到这一点?
答案 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的问题。