转换形式为 12-okt-2007 [重复] 的本地化日期
Posted
技术标签:
【中文标题】转换形式为 12-okt-2007 [重复] 的本地化日期【英文标题】:Converting a localized date of the form 12-okt-2007 [duplicate] 【发布时间】:2010-10-03 08:15:52 【问题描述】:我已导入具有以下格式日期的时间序列:
test = c("11-Feb-01","12-Feb-01","01-Mai-08")
这会产生:
> as.Date(test, "%d-%b-%y")
[1] NA NA "2008-05-01"
既然 May 被翻译,它显然考虑到了语言环境。
根据文档,%b 应该是缩写的月份名称,但我想那里可能存在一些问题。
我将如何解决这个问题?
我在 Linux t2.6.27-9-generic #1 SMP 下运行 R
更新:深入挖掘我发现问题出在 LC_TIME 定义中,其中适当的缩写形式为:
"jan.","feb.","mars", "apr", "mai", "juni", "juli", "aug.","sep.","okt.","nov.", "des."
而我的数据包含:
"Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"
我想我可以考虑对数据进行预处理,但在 R 中以一种流畅的方式执行此操作将是最受欢迎的。
这有点工作,但不是那么优雅:
> as.Date(gsub("Feb","feb.",test), "%d-%b-%y")
[1] "2001-02-11" "2008-02-12" "2008-05-01"
谢谢!
【问题讨论】:
【参考方案1】:我找到的最接近解决方案的方法是对数据进行多次迭代,以将月份名称替换为可解析的名称。
我不确定这是否是最佳解决方案。
setwd("/home/tovare/Data")
v <- read.csv2("valuta_dag.sdv",
na.strings = c("NA","ND"),
header = TRUE, sep=";", skip=2)
v$Dato <- gsub("Jan","01",v$Dato)
v$Dato <- gsub("Feb","02",v$Dato)
v$Dato <- gsub("Mar","03",v$Dato)
v$Dato <- gsub("Apr","04",v$Dato)
v$Dato <- gsub("Mai","05",v$Dato)
v$Dato <- gsub("Jun","06",v$Dato)
v$Dato <- gsub("Jul","07",v$Dato)
v$Dato <- gsub("Aug","08",v$Dato)
v$Dato <- gsub("Sep","09",v$Dato)
v$Dato <- gsub("Okt","10",v$Dato)
v$Dato <- gsub("Nov","11",v$Dato)
v$Dato <- gsub("Des","12",v$Dato)
v$Dato <- as.Date(v$Dato,"%d-%m-%y")
【讨论】:
我认为你是对的。您可以更改 LC_TIME 定义,或更改您的数据。除非没有其他解决方法,否则我非常喜欢不要弄乱 LC_TIME。你有一个替代骚扰 LC_TIME 的方法,所以我会使用它。以上是关于转换形式为 12-okt-2007 [重复] 的本地化日期的主要内容,如果未能解决你的问题,请参考以下文章