如何使用order函数对负值进行排序?

发布于 2024-11-10 11:02:18 字数 256 浏览 4 评论 0原文

我正在尝试使用 order 函数对表的一列进行排序,

a<-c("-2","-7","-4")
b<-c("9","-1","3")


z<-data.frame(a,b)

当我想按 a 列从最大到最小对 Z 进行排序时,它不起作用。该函数按负值的绝对值对负值进行排序。

z[order(z$a,decreasing=TRUE),]

I am trying to use order function to order a column of the table,

a<-c("-2","-7","-4")
b<-c("9","-1","3")


z<-data.frame(a,b)

When I want to order Z by column a, from the largest to smallest, while it doesn't work. The function orders the negative value by its absolute value.

z[order(z$a,decreasing=TRUE),]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

提笔书几行 2024-11-17 11:02:18

如果您需要将因子转换为数字,您必须按照常见问题解答的描述,首先转换为字符 tna,然后再转换为数字:(

 str(z)
#'data.frame':  3 obs. of  2 variables:
# $ a: Factor w/ 3 levels "-2","-4","-7": 1 3 2
# $ b: Factor w/ 3 levels "-1","3","9": 3 1 2

z[order( as.numeric(as.character(z$a)), decreasing=TRUE ), ]
   a  b
1 -2  9
3 -4  3
2 -7 -1

说明:因子,当然除非它们是“有序因子”,否则是有序的与“>”或“<”的比较将返回 NA。

> z$a[1] > z$a[2]
[1] NA
Warning message:
In Ops.factor(z$a[1], z$a[2]) : > not meaningful for factors

您的努力是对 numeric 的内部强制,这与您的预期不同。

> z$a
[1] -2 -7 -4
Levels: -2 -4 -7
> as.numeric(z$a)
[1] 1 3 2

If you need to convert factors to numeric you must, as the FAQ describes, first convert to character tna then to numeric:

 str(z)
#'data.frame':  3 obs. of  2 variables:
# $ a: Factor w/ 3 levels "-2","-4","-7": 1 3 2
# $ b: Factor w/ 3 levels "-1","3","9": 3 1 2

z[order( as.numeric(as.character(z$a)), decreasing=TRUE ), ]
   a  b
1 -2  9
3 -4  3
2 -7 -1

(Explanation: Factors, unless of course they are "ordered factors", are not ordered and comparisons with ">" or "<" will return NA.

> z$a[1] > z$a[2]
[1] NA
Warning message:
In Ops.factor(z$a[1], z$a[2]) : > not meaningful for factors

What is being ordered in your effort was the internal coercion to numeric which was not as you expected. )

> z$a
[1] -2 -7 -4
Levels: -2 -4 -7
> as.numeric(z$a)
[1] 1 3 2
独留℉清风醉 2024-11-17 11:02:18

这是一个简单的向量:

x <- c(2, 4, 0.5, -0.5 ,-1, 3,10) 
print(x) 
2.0  4.0  0.5 -0.5 -1.0  3.0 10.0
> order(x)
 5 4 3 1 6 2 7 # Not cool

> match(x, sort(x)) 
4 6 3 2 1 5 7 # Cool

Here is a simple vector:

x <- c(2, 4, 0.5, -0.5 ,-1, 3,10) 
print(x) 
2.0  4.0  0.5 -0.5 -1.0  3.0 10.0
> order(x)
 5 4 3 1 6 2 7 # Not cool

> match(x, sort(x)) 
4 6 3 2 1 5 7 # Cool
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文