在rpart分类树中打印没有科学记数法的日期

时间:2016-01-08 18:17:33

标签: r rpart rattle

当我创建一个在节点上使用日期截止的rpart树时,我使用的打印方法 - var comparer = new NumberTextComparer(); var numericSortedListASC = numericList.OrderBy(str => str, comparer); var stringSortedListASC = stringList.OrderBy(str => str, comparer); rpart.plot - 以科学计数法打印日期,这使得难以解释结果。这是fancyRpartPlot

enter image description here

有没有办法打印具有更多可解释日期值的树?这个树图是没有意义的,因为所有这些日期看起来都一样。

这是我创建树和绘制两种方式的代码:

fancyRpartPlot

使用此数据:

library(rpart) ; library(rpart.plot) ; library(rattle)
my_tree <- rpart(a ~ ., data = dat)
rpart.plot(my_tree)
fancyRpartPlot(my_tree)

3 个答案:

答案 0 :(得分:3)

从实际的角度来看,也许您只想在数据开始时使用几天:

dat$d <- dat$d-as.POSIXct(as.Date("2012/01/01"))
my_tree <- rpart(a ~ ., data = dat)
rpart.plot(my_tree,branch=1,extra=101,type=1,nn=TRUE)

enter image description here

这可以将数量减少到可管理和有意义的数量(尽管可能没有特定日期那么有意义)。您甚至可能希望将其四舍五入到最近的一天或一周。 (我无法在我的计算机上安装GTK +,因此我无法fancyRpartPlot。)

答案 1 :(得分:1)

一种可能的方法是使用digits中的print选项检查树,并as.POSIXlt转换为日期:

> print(my_tree,digits=100)
n= 100

node), split, n, deviance, yval
      * denotes terminal node

 1) root 100 7.0885590 0.5178471
   2) d>=1346478795.049611568450927734375 33 1.7406368 0.4136051
     4) b>=4.5 23 1.0294497 0.3654257 *
     5) b< 4.5 10 0.5350040 0.5244177 *
   3) d< 1346478795.049611568450927734375 67 4.8127122 0.5691901
     6) d< 1340921905.3460228443145751953125 55 4.1140164 0.5368048
      12) c=hi 28 1.8580913 0.4779574
        24) d< 1335890083.3241622447967529296875 18 0.7796261 0.3806526 *
        25) d>=1335890083.3241622447967529296875 10 0.6012662 0.6531062 *
      13) c=lo,med 27 2.0584052 0.5978317
        26) d>=1337494347.697483539581298828125 8 0.4785274 0.3843749 *
        27) d< 1337494347.697483539581298828125 19 1.0618892 0.6877082 *
     7) d>=1340921905.3460228443145751953125 12 0.3766236 0.7176229 *

## Get date on first node
> as.POSIXlt(1346478795.049611568450927734375,origin="1970-01-01")
[1] "2012-08-31 22:53:15 PDT"

我还会检查digitsrpart.plot中可用的fancyRpartPlot选项:

rpart.plot(my_tree,digits=10)
fancyRpartPlot(my_tree, digits=10)

答案 2 :(得分:0)

我不知道具体的时间顺序日期在您的分类中有多重要,但另一种方法是根据特征细分您的日期。换句话说,根据“年”(2012,2013,2014 ......)创建[1.0]的垃圾箱。 “星期几”(星期一,星期二,星期三,星期四,星期五......)为[1,0]。甚至可能将“日月”(1,2,3,4,5 ...... 31)视为[1,0]。这增加了更多类别以进行分类,但它消除了使用完全格式化日期的问题。