我想知道是否有可能基于一个数字列的绝对值对数据进行排序,而不更改任何按行关联。
我有此数据:
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列进行重新排序。有什么想法吗?
与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)
创建一个排序向量并以此排序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)