r - 这是编码问题吗?
问题描述
我下载了一个文本文件,它基本上包含两列——日期列和内容列。
日期列最初的格式为: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)
。
然而,我注意到,我的大部分字符向量都以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 中的普通日期对象。它们看起来相同,并且编码会让我认为“UTF-8”字符很容易被as.Date()
函数处理。它拒绝转换为日期的一些可能原因是什么?
谢谢!
解决方案
你的第二个字符串中确实有一些奇怪的字符(三个“点”)看看十六进制e280 8e
fread
从data.table
-package 可以很好地阅读这些文本...
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"
推荐阅读
- javascript - 在位于 SRC 文件夹的 index.html 文件中注册一个服务工作者 - ReactJS
- c - 将数据从 SVGimage 格式转换为 xmlDocPtr 共振峰的函数错误
- java - 在 Jtree 中转换字符串
- react-navigation - 使用 React Navigation 5 在选项卡双击时重置选项卡内的堆栈
- python - 类型错误'numpy.float64'没有我无法解决的len(),说服Python它正在处理一个数组?
- excel - 如何加快在共享文件中运行的 excel 宏?
- swift - SwiftUI - 在 AppDelegate 的当前视图之上呈现一个视图
- asp.net-core - 挑战在 Asp .Net Core 3 中究竟意味着什么?
- lotus-notes - 如何使用 lotusscript 在电子邮件中嵌入图像?
- android - 将导航按钮转换为后退按钮?