T
-----
2016m1
2016m10
2016m11
2016m12
2016m2
2016m3
2016m4
2016m5
2016m6
2016m7
2016m8
2016m9
我想安排这张桌子,如下表。
T
-----
2016m1
2016m2
2016m3
2016m4
2016m5
2016m6
2016m7
2016m8
2016m9
2016m10
2016m11
2016m12
所以有人可以帮助我吗?
答案 0 :(得分:3)
使用mixedsort
中的gtools
:
library(gtools)
df$T <- mixedsort(df$T)
或mixedorder
:
df$T <- df$T[mixedorder(df$T)]
输出:
T
1 2016m1
2 2016m2
3 2016m3
4 2016m4
5 2016m5
6 2016m6
7 2016m7
8 2016m8
9 2016m9
10 2016m10
11 2016m11
12 2016m12
数据:
df <- structure(list(T = c("2016m1", "2016m10", "2016m11", "2016m12",
"2016m2", "2016m3", "2016m4", "2016m5", "2016m6", "2016m7", "2016m8",
"2016m9")), .Names = "T", class = "data.frame", row.names = c(NA,
-12L))
答案 1 :(得分:1)
或使用数据向量为 T 的base-R:
T[order(sapply(T, function(l) as.integer(substr(l, 6, nchar(l)+1))))]
答案 2 :(得分:1)
将regex
与gsub
一起使用是这样的:
假设T
是data.frame
last_digits <- as.numeric(gsub("[0-9]{4}m","",T[,1]))
T[order(last_digits),] #Ordered dataframe
正则表达式说明
[0-9]{4}m
查找正好4位数字,如果要使用一系列数字,可以使用{num_1-num_2}
,在找到“规则”之后,它将寻找字母m
。