R - 按日期排序(如 5y, 10d )

R - Sorting by date periods (like 5y, 10d )

有没有一种方法可以按日期对数据进行排序。例如

myCurve <- data.table( Term=c('10y', '3y', '5y'), value = c(2, 1.25, 1.9))

我想把数据按Term排序,这样结果就这样

Term  Value
3y    1.25
5y    1.90
10y   2.00

术语可以是 d、w、m、y 等。

我注意到,OP 的 post 中的简单示例不是仅使用 'year' 创建的,而是可能存在 'day'、'week' 和 'month'(以'd'、'w'、'm'为后缀表示)也将出现在原始数据中。我们可以将字符串转换为天数。我们将 'Term' 中的数字与非数字字符分开,将 'non-numeric' 转换为 factor,以天为单位指定 levels,以便我们转换 'y'到 365,'m' 到 '30','w' 到 '7' 和 'd' 为 1 类似地,数字部分使用 as.numeric 转换,乘法,然后 order.

 myCurve1[order(as.numeric(sub('\D+', '', Term))*
     as.numeric(as.character(factor(sub('\d+', '', Term),
     levels=c('d', 'w', 'm', 'y'), labels=c(1, 7, 30, 365)))))]
#   Term Value
#1:   5d  2.00
#2:  12d  2.40
#3:   2w  2.10
#4:   2m  4.30
#5:  12w  4.20
#6:   7m  7.50
#7:   3y  1.90
#8:   5y  2.50
#9:  10y  1.25

数据

myCurve1 <- data.table(Term=c('10y', '3y', '5d', '2w', '12d', '12w', '7m', 
     '5y', '2m'), Value=c(1.25, 1.9, 2, 2.1, 2.4, 4.2, 7.5, 2.5, 4.3))