【发布时间】:2018-05-06 16:39:54
【问题描述】:
我正在尝试将一列日期转换为字符串,因为我想在以后的代码中将它们用作因子级别。
日期列是 tibble 的一部分,属于 Date 类。我认为一个简单的 as.character() 转换就可以解决问题,但不幸的是我错了。它不是整齐地格式化字符串,而是以字符串形式返回一个数字。例如,今天(2017 年 11 月 22 日)将显示为“17492”。所以在这个过程的某个地方,日期被转换成它的数字格式,然后才变成一个字符串。
现在我确实找到了一种解决方法,即取消列出数据,将其再次转换为日期,然后再转换为字符串,但效率相当低。
谁能解释一下 i) 为什么会发生这种情况以及 ii) 是否有更简单的解决方法?
下面是一个可重现的例子:
#Get current system date
foo <-Sys.Date()
#Convert to list
foo <- as.list(foo)
#The following then produces the number string:
as.character(foo)
[1] "17492"
#The following code works but is a rather annoying work-around
as.character(as.Date(unlist(foo), origin=as.Date("1970-01-01")))
[1] "2017-11-22"
【问题讨论】:
-
lapply(foo, as.character) -
您将日期存储在列表中而不是示例中的简单向量中是否有原因?通常,小标题中的列存储为向量。您的可重现示例是否准确反映了您的实际问题?
-
@d.b 太好了,谢谢。像微风一样工作。
-
至于“为什么”,在列表中使用
as.character是很普遍的事情,与日期无关。我正在尝试找到一个非常好的副本... -
似乎基本问题是运行
as.character(foo)(其中 foo 是 1 列小标题)与as.character(foo$date)不同。