R语言中转换文本特殊字符为纯文本以实现日期格式转换
解决R中特殊字符日期的读取与转换问题
我明白你现在遇到的困扰:读取带特殊字符的文本文件后,日期里的û被显示成<U+00FB>,替换操作没成功,没法转换成标准的数值日期格式。咱们一步步来搞定它:
1. 先修复文件读取的编码问题
<U+00FB>其实是R对Unicode字符û的转义显示,这通常是因为读取文件时没指定正确的编码导致的。你需要根据文件的实际编码(比如UTF-8或Latin-1)在read.table里加上encoding参数:
# 先尝试UTF-8编码(大多数现代文本文件用这个) donnees <- read.table("Shanghaifr.txt", sep="\t", header = TRUE, encoding = "UTF-8") # 如果UTF-8不行,试试Latin-1(旧的西欧字符编码) donnees <- read.table("Shanghaifr.txt", sep="\t", header = TRUE, encoding = "Latin-1")
读取后可以用cat(donnees$datesr[[15]])查看实际字符,正常情况下应该显示17aoû2017而不是带转义的版本。
2. 正确替换字符并补全日期格式
如果读取后日期是17aoû2017,你需要把aoû补全为août(也就是添加t)。之前的sub没成功,是因为你匹配的是转义后的字符串<U+00FB>,但实际读取正确后,字符串里是真实的û字符,所以直接匹配aoû即可:
datest <- donnees$datesr[[15]] # 替换并补全缺失的t datest_fixed <- sub("aoû", "août", datest)
如果你的文件里确实写的是<U+00FB>这种转义文本(不是编码问题),那需要转义正则里的特殊字符(<、+、>):
datest_fixed <- sub("ao<U\\+00FB>", "août", datest)
3. 转换为数值日期
最后要把17août2017转成数值日期,需要注意%b(月份缩写)依赖系统的本地语言设置,所以先切换到法语环境:
# Linux/macOS系统用这句 Sys.setlocale("LC_TIME", "fr_FR.UTF-8") # Windows系统请用下面这句 # Sys.setlocale("LC_TIME", "French_France.1252") # 执行日期转换 date_num <- as.Date(datest_fixed, "%d%b%Y")
这样就能得到你想要的数值日期格式啦!
内容的提问来源于stack exchange,提问作者Deborah Houngbedji
相关产品推荐
相关产品推荐

