转换形式为 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 [重复] 的本地化日期的主要内容,如果未能解决你的问题,请参考以下文章

在python中将指数形式的数字转换为十进制形式[重复]

将字符串形式的二进制转换为整数[重复]

如何将此数组的字符串表示形式转换为实际的php数组[重复]

将列表的字符串表示形式转换为带引号和双引号的列表[重复]

Python:将字符串列表转换为布尔值,其中布尔值以字符串形式存在[重复]

R从短格式转换为长格式,以简短形式计数[重复]