1

我有一个要解析为 class 的字符串变量Date。除了日、年和月,该格式还有其他字符,如分隔符 ( , )、字母和撇号 ( u''),如下所示:

"u'9', u'2005', u'06'"

我努力了

as.Date(my_data$date, format = '%d %Y %m')

...但它只会产生缺失值。我希望 R 将其解释u''为 unicode 指示符,但事实并非如此。

如何剥离所有那些未使用的字符,使其"u'9', u'2005', u'06'"变得简单 this "9 2005 06"

4

3 回答 3

4

您不需要去除转换规范中未使用的字符。在?as.Date中,format参数指向?strptime(“否则,处理是通过strptime”)。在?strptime* 的详细信息部分,我们发现:

“[a] 格式字符串中不属于转换规范的任何字符都按字面解释”

也就是说,在 的format参数中as.Date,您不仅可以包括转换规范(由 引入%),还可以包括“其他字符”:

此外,从?as.Date

根据指定格式尽可能处理字符串:忽略任何尾随字符

因此,这有效:

as.Date("(u'9', u'2005', u'06')", format = "(u'%d', u'%Y', u'%m")
# [1] "2005-06-09"
于 2016-07-16T20:41:30.900 回答
1

尝试这个:

as.Date(gsub("[u',()]","",my_data$date), format = '%d %Y %m')

单个字符串的示例:

d <- "(u'9', u'2005', u'06')"
d <- gsub("[u',()]","",d)
d.date <- as.Date(d, "%d %Y %m")

结果:

d.date
[1] "2005-06-09"
于 2016-07-16T16:14:48.470 回答
0

如果是字符类,可以试试:

library(lubridate)

test <- c("u'9'", "u'2005'", "u'06'")

dym(paste(gsub("u|'", "", test), collapse = "/"))
[1] "2005-06-09 UTC"

在这里,我使用lubridate将删除“u”和 ' 字符的字符串转换为时间格式。我使用的折叠字符paste是任意的,lubridate可以处理几乎任何东西作为日期部分之间的分隔符。

于 2016-07-16T11:52:54.963 回答