gpt4 book ai didi

r - 摆脱 SAS 和 R 之间的 BOM

转载 作者:行者123 更新时间:2023-12-01 08:00:18 24 4
gpt4 key购买 nike

我使用 SAS 保存一个制表符分隔的文本文件 utf8在windows机器上编码。然后我尝试在 R 中打开它:

read.table(myfile, header =TRUE, sep = "\t")

令我惊讶的是,数据完全困惑了,但只是以偷偷摸摸的方式。数值随机变化,但整体布局看起来很正常,所以我花了一段时间才注意到这个问题,我现在假设是 BOM .

这当然不是新问题;他们简短地解决了这个问题here , 并推荐使用

read.table(myfile, fileEncoding = "UTF-8", header =TRUE, sep = "\t")

然而,这并没有改善!我唯一的解决方案是抑制标题,有或没有 fileEncoding参数:

read.table(myfile, fileEncoding = "UTF-8", header =FALSE, sep = "\t")
read.table(myfile, header =FALSE, sep = "\t")

在任何一种情况下,我都必须做一些有趣的事情来用第一行替换列名,但只有在我删除出现在第一列名开头的某个版本的 BOM 之后(<U+FEFF> 如果我使用 fileEncoding如果我不使用 fileEncoding ).

难道没有一种简单的方法可以删除 BOM 并使用 read.table没有任何特殊论据?

@Joe 更新:我使用的 SAS:

FILENAME myfile 'C:\Documents ... file.txt'  encoding="utf-8";
proc export data=lib.sastable
outfile=myfile
dbms=tab replace;
putnames=yes;
run;

关于进一步怪异的更新:使用 fileEncoding="UTF-8-BOM"正如@Joe 在他下面的解决方案中所建议的那样,似乎删除了 BOM。 但是,它并没有解决我最初的动机问题,即数据损坏;标题行很好,但奇怪的是第一列数字的最后几位被弄乱了。我会感谢 Joe 的回答——也许我的问题实际上不是 BOM 问题?

黑客解决方案:使用fileEncoding="UTF-8-BOM"并且还包括参数 colClasses = "character" .不知道为什么这可以解决数据损坏问题 - 可能是 future 问题的主题。

最佳答案

根据您的链接,它看起来适合我:

read.table('c:\\temp\\testfile.txt',fileEncoding='UTF-8-BOM',header=TRUE,sep='\t')

注意文件编码中的-BOM。

这是在2.1 Variations on read.table在 r 文档中。在 12 编码下,请参阅“在 UNIX 下您可能需要...”,这显然现在甚至适用于 Windows(至少对我而言)。

关于r - 摆脱 SAS 和 R 之间的 BOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23351020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com