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))
有没有一种方法可以按日期对数据进行排序。例如
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))