我想知道是否可以在不更改任何行关联的情况下,根据一个数字列的绝对值对数据进行排序。
我有此数据:
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
列的排序(按绝对值)然后对{ {1}}列。有什么想法吗?
答案 0 :(得分:5)
创建一个排序向量,并以此排序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)
答案 1 :(得分:4)
使用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