在R中按绝对值排序而不更改数据

Dij*_*Dij 1 r

我想知道是否有可能基于一个数字列的绝对值对数据进行排序,而不更改任何按行关联。

我有此数据:

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
Run Code Online (Sandbox Code Playgroud)

预期产量:

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
Run Code Online (Sandbox Code Playgroud)

我尝试使用setorderv和的几种方法,sort但我不知道如何扩展value列的排序(按绝对值),然后相应地对name列进行重新排序。有什么想法吗?

Nel*_*Gon 6

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
Run Code Online (Sandbox Code Playgroud)

如果您愿意使用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
Run Code Online (Sandbox Code Playgroud)


G. *_*eck 5

创建一个排序向量并以此排序df。不使用任何软件包。

o <- order(abs(df$value), decreasing = TRUE)
df[o, ]
Run Code Online (Sandbox Code Playgroud)

给予:

  name value
5 var5     3
6 var6    -3
1 var1     2
3 var3    -2
2 var2     1
7 var7    -1
4 var4     0
Run Code Online (Sandbox Code Playgroud)

注意

如果要在具有相同内容的多行中对abs(value)它们进行排序,请按降序value使用o

o <- order(abs(df$value), df$value, decreasing = TRUE)
Run Code Online (Sandbox Code Playgroud)