我下载了一个文本文件,该文件基本上包含两列-日期列和内容列。
日期列最初的格式为:mm/dd/yy h:mm:ss am/pm
。例如,这样的日期将是10/16/2018 8:10:10 PM
我想将正常日期隔离。我使用strsplit()
命令拆分了文本列,因此现在有了一个带有通用mm/dd/yy
格式的日期的向量。我想使用as.Date(x, format = '%m/%d/%y)
coommand进行转换。
但是,我注意到我的字符向量中有很大一部分以NA
的形式出现。我将NA
值与其周围的值进行了比较。这是我看到的:
normal_vector[1:3]
[1] "10/12/17" "10/12/17" "10/12/17"
**中间一个(normal_vector[2]
)是问题之一。 **
as.Date(normal_vector[1:3], format = "%m/%d/%y")
[1] "2017-10-12" NA "2017-10-12"
这可能是编码问题吗?我尝试使用as.Date(iconv(normal_vector[1:3], to = "UTF-8"), format = "%m/%d/%y")
,但似乎无济于事。此外,如果我按原样检查字符向量的编码,则会得到以下信息:
Encoding(normal_vector[1:3])
[1] "unknown" "UTF-8" "unknown"
同样,我只想将所有这三个元素转换为R中的普通日期对象。它们看起来是相同的,并且编码使我认为{{{ 1}}函数。拒绝将其转换为日期的可能原因有哪些?
谢谢!
答案 0 :(得分:1)
第二个字符串中确实有一些奇怪的字符(三个“点”)
看看十六进制e280 8e
fread
包中的 data.table
可以很好地读取这些文本...
data.table::fread("./temp.csv", header = FALSE)
# V1 V2 V3
# 1: 10/12/17 ‎10/12/17 10/12/17
阅读后,您可以使用一些正则表达式魔术来清理您的数据...
dt <- data.table::fread("./temp.csv", header = FALSE)
# V1 V2 V3
# 1: 10/12/17 ‎10/12/17 10/12/17
#strip all NON 0-9, a-z, A-z AND '/' -characters
cleaned <- as.character( gsub( "[^0-9a-zA-Z/]", "", as.matrix( dt ) ) )
as.Date( cleaned, format = "%m/%d/%y" )
# [1] "2017-10-12" "2017-10-12" "2017-10-12"