в R Сортировка по абсолютной величине без изменения данных - PullRequest
1 голос
/ 15 мая 2019

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

У меня есть эти данные:

name <- NULL; value <- NULL
for (i in 1:7) {
  name[i] <- paste0("var", i)
  value[i] <- 4 - i 
}

df <- data.frame(name, value = sample(value,size = 7)); df #set.seed(1)

  name value
1 var1     2
2 var2     1
3 var3    -2
4 var4     0
5 var5     3
6 var6    -3
7 var7    -1

Ожидаемый результат:

df.sorted
  name value
1 var5     3
2 var6    -3
3 var1     2
4 var3    -2
5 var2     1
6 var7    -1
7 var4     0

Я пробовал несколько методов, используя setorderv и sort, но я не могу понять, как расширить сортировку столбца value (по абсолютному значению) дозатем измените порядок столбцов name соответственно.Есть мысли?

Ответы [ 2 ]

5 голосов
/ 15 мая 2019

Создайте вектор заказа и заказывайте df.Пакеты не используются.

o <- order(abs(df$value), decreasing = TRUE)
df[o, ]

, давая:

  name value
5 var5     3
6 var6    -3
1 var1     2
3 var3    -2
2 var2     1
7 var7    -1
4 var4     0

Примечание

Если в нескольких строках с одинаковым abs(value) вы хотите упорядочить их в порядке убыванияиз value используйте это для o:

o <- order(abs(df$value), df$value, decreasing = TRUE)
4 голосов
/ 15 мая 2019

С base:

df[sort(abs(df$value),decreasing=T,index.return=T)[[2]],]
  name value
5 var5     3
6 var6    -3
1 var1     2
3 var3    -2
2 var2     1
7 var7    -1
4 var4     0

Если вы открыты для использования dplyr:

df %>% 
   arrange(desc(abs(value)))
  name value
1 var5     3
2 var6    -3
3 var1     2
4 var3    -2
5 var2     1
6 var7    -1
7 var4     0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...