无法将我的列命名为日期

时间:2016-04-02 14:59:21

标签: r

我有一系列日期,其中一些产品被购买。我创建了一个与产品和日期相关的数据透视表,但是有些日期没有出售。我可以找到丢失的日期,甚至将它们添加到主数据框中,问题是不是保留日期格式,而是采用整数格式(整数是到原点的距离),我无法对它们进行排序。我正在使用的代码是:

  upper.bound<- paste("01", month[1], 2013, sep="-")
  lower.bound <- paste("30", month[4], 2013, sep="-")

  dates <- seq(as.Date(upper.bound, "%d-%m-%Y"), as.Date(lower.bound, "%d-%m-%Y"), "days")

  diff <- setdiff(dates, as.Date(colnames(export_f_ub), "%Y-%m-%d"))

  len <- dim(as.matrix(diff))[1]*11

  aux <- data.frame()
  aux <- seq(0,0,length.out=len)
  dim(aux) <- c(11, dim(as.matrix(diff))[1])
  col_dates <- as.Date(diff, origin="1970-01-01")
  colnames(aux)<- c(col_dates)

这是将矩阵设置为零然后将其绑定到主矩阵的试用版。但这不起作用,因为在结果中我将列名称作为数字。这是控制台的屏幕截图:

Console log

1 个答案:

答案 0 :(得分:0)

我从未见过有人尝试将Date向量分配为矩阵的列名。维度名称必须始终是字符串,因此通常这不是您应该做的事情。

话虽如此,就效果而言,直观的期望是R中的列名称赋值机制会在某个时刻将Date向量强制转换为as.character()行的字符。 ,因此您将获得日期的文本表示,而不是其基础双值的字符串化。

在矩阵上调用`colnames<-`()最终会调用`dimnames<-`(),它会通过运行.Primitive("dimnames<-")进入C代码。我还没有真正研究过C实现,但是我们可以猜测,它会在某个时刻拉出double向量下面的Date值,强制它们成为字符,并且它会在为什么你最终将数字作为你的列名。

这里的正确方法是在分配名称时自己致电as.character()

col_dates <- as.Date(c('2013-06-03','2013-06-04','2013-06-05','2013-06-06','2013-06-08','2013-06-22','2013-07-07','2013-07-08','2013-07-11','2013-07-13','2013-07-23','2013-07-25','2013-07-26','2013-08-27','2013-09-03','2013-09-04','2013-09-05','2013-09-06','2013-09-07','2013-09-09','2013-09-10','2013-09-11','2013-09-13','2013-09-14','2013-09-15','2013-09-16','2013-09-18','2013-09-20','2013-09-21','2013-09-22','2013-09-24','2013-09-30'));
aux <- matrix(0,11L,length(col_dates));
colnames(aux) <- as.character(col_dates);
aux;
##       2013-06-03 2013-06-04 2013-06-05 2013-06-06 2013-06-08 2013-06-22 2013-07-07 2013-07-08 2013-07-11 2013-07-13 2013-07-23 2013-07-25 2013-07-26 2013-08-27 2013-09-03 2013-09-04 2013-09-05 2013-09-06 2013-09-07 2013-09-09 2013-09-10 2013-09-11 2013-09-13 2013-09-14 2013-09-15 2013-09-16 2013-09-18 2013-09-20 2013-09-21 2013-09-22 2013-09-24 2013-09-30
##  [1,]          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0
##  [2,]          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0
##  [3,]          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0
##  [4,]          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0
##  [5,]          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0
##  [6,]          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0
##  [7,]          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0
##  [8,]          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0
##  [9,]          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0
## [10,]          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0
## [11,]          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0

但是你应该知道列名不保留Date类或内部表示(引用double值);它们是纯粹的字符串。如果您想从列名重新创建Date向量,则必须通过as.Date()运行它们。

顺便说一下,dim(as.matrix(x))[1]对于向量x是一种不必要的迂回方式来获取length(x)