首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么stringr::str_order(x,数值= T)与dplyr::排列的排序方式与硬括号不同?

为什么stringr::str_order(x,数值= T)与dplyr::排列的排序方式与硬括号不同?
EN

Stack Overflow用户
提问于 2021-12-09 22:38:44
回答 2查看 155关注 0票数 1

我试图通过一个包含一些数值的文本列来排列一个data.frame:

代码语言:javascript
复制
foo <- data.frame(x = c("A100", "A1", "A2", "A10", "A11"))

我试图使用stringr::str_order(foo$x,数值= TRUE)或类似的方法对其进行数字排序。我试图在dplyr::安排中使用这个,但是它没有正确地排列。以下是我所做的:

代码语言:javascript
复制
dplyr::arrange(foo, stringr::str_order(x,numeric = T))

在我的机器上,它按照A11、A100、A1、A2、A10的顺序返回值,而不是A1、A2、A10、A11、A100。此代码正确工作:

代码语言:javascript
复制
foo[stringr::str_order(foo$x,numeric = T),]

我希望它们能做同样的事情,但它们不会,至少在我的机器(Windows 10,RVersion4.1.0)和我兄弟的(Mac,RVersion4.0.2)上是这样。

我的问题是,为什么输出是不同的?我遗漏了什么?有没有办法使str_order和安排一起工作?

我希望能够使用dplyr::安排对该列进行排序,这样我就不需要跟踪我所使用的所有位置。

谢谢你的想法和时间!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-10 00:27:25

注意,str_orderorder一样返回indix,每个元素都将以升序方式包含,例如:

代码语言:javascript
复制
str_order(foo$x,numeric = T)
[1] 2 3 4 5 1

表示最后一个元素,即当前最大的元素位于位置1,而第一个元素,即最小的元素,位于当前向量的位置2。

另一方面,arrange采取的立场是,元素一旦被排序,即等级(没有联系)。

代码语言:javascript
复制
y <- c(100,1,2,10,11)
order(y)
[1] 2 3 4 5 1 # We do not want this
rank(y)
[1] 5 1 2 3 4 # We want this.

请注意,秩表示最小的对象(1)位于位置2,最大的对象(5)位于位置1。

要得到这个,只需对有序向量进行排序。因此:

代码语言:javascript
复制
arrange(foo, order(str_order(x,numeric = T)))
     x
1   A1
2   A2
3  A10
4  A11
5 A100
票数 1
EN

Stack Overflow用户

发布于 2021-12-09 22:52:22

您可以使用:

代码语言:javascript
复制
dplyr::arrange(foo, match(x, stringr::str_sort(x,numeric = T)))

     x
1   A1
2   A2
3  A10
4  A11
5 A100
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70297610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档