【发布时间】:2015-12-02 03:05:07
【问题描述】:
有没有办法按日期对数据进行排序。例如
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 等。
【问题讨论】:
有没有办法按日期对数据进行排序。例如
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 帖子中的简单示例中,可能存在“日”、“周”和“月”(由“d”、“w”表示, 'm' 作为后缀)也将出现在原始数据中。我们可以将字符串转换为天数。我们将“术语”中的数字与非数字字符分开,将“非数字”转换为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))
【讨论】: