在 R 中读取波斯字符

数据挖掘 r 数据集
2022-02-10 10:40:05

我有一个包含波斯语字符的 csv 文件,我无法在 R 中正确查看它们。另外,我不能根据波斯字符值进行子集化。这是一个示例代码:

list1 <- c("x","y")
list2 <- c("ب","الف")

list1 
list2 ##OK-readable

writedf <- as.data.frame(cbind(list1,list2),encoding="UTF-8")
write.csv(writedf,"test.csv")
testdf <- read.csv("test.csv",encoding="UTF-8")

testdf  
## not readable

testdf[,testdf$list2=="ب"]
## data frame with 0 columns and 2 rows  ???
3个回答
  • 确保文件以 UTF 格式保存
  • 尝试Sys.setlocale("LC_ALL", locale_code)查看此功能的文档

首先,我应该提到这是一个特定于操作系统的问题。你会在 Windows 中看到这个问题,但在 Linux 中看不到(我不确定 OS X,但那里可能也没有问题。)

您的代码的问题不在于阅读部分。如果您test.csv在 Notepad++ 中打开,您将看到如下内容:

从 R 写入的文件

如果您在 Notepad++ 中对其进行编辑,使其看起来像

在记事本++中编辑的文件

然后你运行这个:

testdf <- read.csv("test.csv",encoding="UTF-8")
testdf[1,3]
testdf$list2
plot(1:10,main=testdf2[2,3])

你会看到没有问题。

所以实际上有两个问题:

  1. 写入 Unicode 文本时,R 将其更改回系统区域设置,然后再次更改为 unicode,这就是将数据写入 csv 文件无法正常工作的原因。

  2. R 在显示 Unicode 数据时存在问题,data.frame因此即使在正确读取之后,testdf也会在那里打印那些代码而不是 Unicode 字符。

在 R 邮件列表档案中看到这个关于将 Unicode 文本写入文本文件中的问题(在 Windows 中),以及这个关于UTF-8 文件输出的问题在 stackoverflow 上的 R 中。

改用subsetiesubset(testdf, testdf$list2=="ب")会得到你想要的结果。