Есть ли функция R для сортировки переменных столбцов? - PullRequest
0 голосов
/ 19 мая 2019

Есть ли функция R для сортировки переменных столбцов? У меня есть список столбцов, как показано ниже

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

По умолчанию R сортирует 11, 110, 1100 и т. Д.

Но мне нужно,

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

Есть ли способ сделать это?

Ответы [ 2 ]

1 голос
/ 19 мая 2019

Обходной путь с базой 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.

1 голос
/ 19 мая 2019

Если у вас есть только 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 select в сочетании с everything может упростить задачу, как мы используем ниже.

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))

Как указывает @akrun, мы можем пропустить 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:

 library(dplyr)
    df %>% 
      select(Col1,`11`,`12`,everything())
      Col1 11 12 110 1100
    1    a  1 22   2   20
    2    b 16 18   5    3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...