R 按字母和数字排序
我有一个R 按字母和数字排序,r,R,我有一个DF$vector,看起来像这样: A10 A50 C1 C4 B1 A7 C3 B1 B4 我想通过以下方式订购: A10 A50 A7 B1 B4 B1 C1 C4 C3 我尝试使用gsub: vector[order(gsub("([A-Z]+)([0-9]+)", "\\1", vector), as.numeric(gsub("([A-Z]+)([0-9]+)", "\\2", vector)))] 但它没有返回我想要的。 谢谢您的建议。我们可
DF$vector
,看起来像这样:
A10 A50
C1 C4
B1
A7
C3
B1 B4
我想通过以下方式订购:
A10 A50
A7
B1 B4
B1
C1 C4
C3
我尝试使用gsub
:
vector[order(gsub("([A-Z]+)([0-9]+)", "\\1", vector),
as.numeric(gsub("([A-Z]+)([0-9]+)", "\\2", vector)))]
但它没有返回我想要的。
谢谢您的建议。我们可以使用
订单
从基本R
df1[order(sub("\\d+", "", df1[,1]), as.numeric(sub("\\D+", "", df1[,1])), df1[,2] == ""),]
# A10 A50
#3 A7
#5 B1 B4
#2 B1
#1 C1 C4
#4 C3
数据
df1在编程语言中,字母被认为在数量上在增加。因此,A
被认为是小于B
等。因此,要对上述内容进行排序,只需使用代码:
df1$r=rank(df1$A10,ties.method = "last")
df1[order(df1$r),-ncol(df1)]
A10 A50
3 A7
5 B1 B4
2 B1
1 C1 C4
4 C3
@RonakShah我也检查过了。它没有完全返回我想要的订单为我工作d[mixedorder(d$V1),]
@Jimbou这是我之前的选择,但是正如OP提到的,第二行第二列应该有B4谢谢!但是如果向量
包含B1
而不是B3
,那么mixedorder
会将它放在b1b4
之前,这是克服它的一种方法吗?谢谢大家!@Pooh请告诉我们您是否有data.frame或vector。它看起来不像矢量井,我有一个data.frame,但我只想订购一个column@Pooh好吧,那么,请在你的帖子中澄清一下,我有一个向量,它看起来像是这样的
令人困惑:你可能没有注意到,我是在B1 B4
之后,而不是之前寻找排序的。。如果这只发生在B1上,或者即使有C1,它也应该在C1和C4之后??这不仅适用于B1
,而且适用于任何情况,因此对于C1
,我给出的结果也不符合您的期望?我想我不太明白你的意思,我们会的。请再检查一下我的成绩。我确实编辑了它。问题是,DF$vector
是数据帧的字符向量,而不是您假设的2列
df1$r=rank(df1$A10,ties.method = "last")
df1[order(df1$r),-ncol(df1)]
A10 A50
3 A7
5 B1 B4
2 B1
1 C1 C4
4 C3