Переставьте два столбца так, чтобы значения первого столбца всегда были больше в R - PullRequest
2 голосов
/ 29 мая 2020

У меня есть два столбца с целыми числами. Мне нужно переставить столбцы так, чтобы значения первого столбца всегда были больше

Пример ввода:

     co1 co2
[1,]  15  25
[2,]  35  55
[3,]  65  45
[4,]  40  50

Желаемый результат:

     co1 co2
[1,]  25  15
[2,]  55  35
[3,]  65  45
[4,]  50  40

Любая помощь будет быть оцененным.

Ответы [ 3 ]

2 голосов
/ 29 мая 2020

Базовый однострочник R:

mat[] <- t(apply(mat, 1, sort, decreasing = TRUE))
mat
#     co1 co2
#[1,]  25  15
#[2,]  55  35
#[3,]  65  45
#[4,]  50  40

Данные

mat <-
structure(c(25L, 55L, 65L, 50L, 15L, 35L, 45L, 40L), 
.Dim = c(4L, 2L), .Dimnames = list(NULL, c("co1", "co2")))
1 голос
/ 29 мая 2020

Мы также можем использовать pmin/pmax из base R

cbind(pmax(mat[,1], mat[,2]), pmin(mat[,1], mat[,2]))
#     [,1] [,2]
#[1,]   25   15
#[2,]   55   35
#[3,]   65   45
#[4,]   50   40

данные

mat <- structure(c(25L, 55L, 65L, 50L, 15L, 35L, 45L, 40L), .Dim = c(4L, 
2L), .Dimnames = list(NULL, c("co1", "co2")))
0 голосов
/ 29 мая 2020

Мое решение таково:

for(i in 1:dim(df)[1]){
  if(df[i,1]<df[i,2]){
    df[i,1]->store
    df[i,2]->df[i,1]
    store->df[i,2]
  }
}

Однако я уверен, что в строке есть изящное решение!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...