首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中读取utf-8格式的数据?

如何在R中读取utf-8格式的数据?
EN

Stack Overflow用户
提问于 2014-04-05 12:54:46
回答 2查看 73.3K关注 0票数 13

我的系统:Win7+R-3.0.2。

代码语言:javascript
复制
> Sys.getlocale()
[1] "LC_COLLATE=Chinese (Simplified)_People's Republic of China.936;LC_CTYPE=Chinese 
(Simplified)_People's Republic of China.936;LC_MONETARY=Chinese (Simplified)_People's        
republic of China.936;LC_NUMERIC=C;LC_TIME=Chinese (Simplified)_People's Republic of China.936"

微软记事本中保存了两个内容相同的文件:one保存为ansi格式,the other保存为utf8 format.The data is death name in M370马来西亚航空公司。或者,您可以这样创建文件。

1)将数据复制到microsoft记事本。

代码语言:javascript
复制
乘客姓名,性别,出生日期
HuangTianhui,男,1948/05/28
姜翠云,女,1952/03/27
李红晶,女,1994/12/09

2)在记事本中保存为ansi格式的test.ansi。

3)在记事本中保存为utf-8格式的test.utf8。

代码语言:javascript
复制
read.table("test.ansi",sep=",",header=TRUE)  #can work fine
read.table("test.utf8",sep=",",header=TRUE)  #can't work

然后,我将编码设置为utf-8。

代码语言:javascript
复制
options(encoding="utf-8")
read.table("test.utf8",sep=",",header=TRUE,encoding="utf-8")


 In read.table("test.utf8", sep = ",",header=TRUE,encoding = "utf-8") :
invalid input found on input connection 'test.utf8'

如何读取数据文件(test.utf8)?

在python中,它非常简单。

代码语言:javascript
复制
rfile=open("g:\\test.utf8","r",encoding="utf-8").read()
rfile
'\ufeff乘客姓名,性别,出生日期\n\nHuangTianhui,男,1948/05/28\n\n姜翠云,女,1952/03
/27\n\n李红晶,女,1994/12/09'
rfile.replace("\n\n","\n").replace("\ufeff","").splitlines()
['乘客姓名,性别,出生日期', 'HuangTianhui,男,1948/05/28', '姜翠云,女,1952/03/27',
 '李红晶,女,1994/12/09']

Python可以比R更好地完成这项工作。

我就像Sathish说的那样,问题解决了一点,还剩下一些。

我发现当数据在data.frame中时,它不能正确地显示。

当数据是data.frame的一列时,可以正常显示。

奇怪的是,当数据是一行data.frame时,它不能正确显示。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-08 11:46:52

操作系统: Windows-7 (64位)

R版本:

代码语言:javascript
复制
package_version(R.version)

[1] ‘3.0.2’

将区域设置从“中文”更改为"English_United States.1252“

代码语言:javascript
复制
  Sys.setlocale(category="LC_ALL", locale = "English_United States.1252")

  Sys.getlocale(category="LC_ALL")

[1] "LC_COLLATE=English_United States.1252;LC_CTYPE=English_United        States.1252;LC_MONETARY=English_United States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252"

用中文编码读入数据

代码语言:javascript
复制
 df_ch <- read.table("test.utf8",
                     sep=",",
                     header=FALSE, 
                     encoding="chinese", 
                     stringsAsFactors=FALSE
                    )

使用UTF-8编码读取数据

代码语言:javascript
复制
 df_utf8 <- read.table("test.utf8",
                        sep=",",
                        header=FALSE, 
                        encoding="UTF-8", 
                        stringsAsFactors=FALSE 
                      )

在RStudio版本0.98.501中

代码语言:javascript
复制
 df_ch$V1[1]

[1] "乘客姓å"

 df_utf8$V1[1]

[2] "乘客姓名"

 df_utf8$V1

[1] "乘客姓名"         "HuangTianhui"    "姜翠云"          "李红晶"          "LuiChing"        "宋飞飞"         
[7] "唐旭东"          "YangJiabao"      "买买提江·阿布拉" "安文兰"          "鲍媛华"          "边亮京"         
[13] "边茂勤"          "曹蕊"            "车俊章"          "陈长军"          "陈建设"          "陈昀"           
[19] "戴淑玲"          "丁立军"          "丁莹"            "丁颖"            "董国伟"          "杜文忠"         
[25] "冯栋"            "冯纪新"          "付宝峰"          "甘福祥"          "甘涛"            "高歌"           
[31] "管文杰"          "韩静"            "侯爱琴"          "侯波"            "胡偲婠(婴儿)"    "胡效宁"         

显示数据框中行的unicode数据

代码语言:javascript
复制
  df_utf8[1,]
                                    V1               V2                               V3
  1 <U+FEFF><U+4E58><U+5BA2><U+59D3><U+540D> <U+6027><U+522B> <U+51FA><U+751F><U+65E5><U+671F>

显示数据框中一行的中文数据

代码语言:javascript
复制
as.character(df_utf8[1,])

[1] "乘客姓名"  "性别"     "出生日期"

as.character(df_utf8[2,])

[1] "HuangTianhui" "男"           "1948/05/28"

通过将数据框转换为列表并将数据强制转换为字符格式,可以使用国际字符显示多列数据。

代码语言:javascript
复制
  df_utf8_ch <- lapply(df_utf8, as.character)

  df_utf8_ch

$V1 1 "HuangTianhui“"LuiChing”“姜翠云”“李红晶”"宋飞飞“

7 "唐旭东“"YangJiabao”“买买提江·阿布拉”“安文兰”“鲍媛华”“边亮京”

13“边茂勤”“曹蕊”“车俊章”“陈长军”“陈建设”“陈昀”

19“戴淑玲”“丁立军”“丁莹”“丁颖”“董国伟”“杜文忠”

25“冯栋”“冯纪新”“付宝峰”“甘福祥”“甘涛”“高歌”

31“管文杰”“韩静”“侯爱琴”“侯波”“胡偲婠(婴儿)”“胡效宁”

37“黄毅”“姜学仁”“姜颖”“焦微微”“焦文学”“鞠坤”

43“康旭”“黎明中”“李国辉”“李洁”“李乐”“李文博”

49“李燕”“李宇辰”“李志锦”“李志欣”“李智”“栗延林”

55“梁路阳”“梁旭阳”“林安南”“林明峰”“刘凤英”“刘金鹏”

61“刘强”“刘如生”“刘顺超”“柳忠福”“楼宝棠”“卢先初”

67“鹿建华”“罗伟”“马骏”“马文芝”“毛土贵”“么立飞”

73“蒙高生”“孟兵”“孟凡余”“欧阳欣”“石贤文”“宋春玲”

79“宋坤”“苏强国”“汤雪竹”“田军伟”“田清君”“汪厚彬”

85“王春勇”“王纯华”“王丹”“王海涛”“王利军”“王林诗”

91“王墨恒(婴儿)”“王守宪”“王淑敏”“王献军”“王永刚”

$V2 1“性别”“男”“女”“男”“男”“女”“男”“女”“女”“男”“女”“男”

17“男”“女”“女”“男”“女”“女”“男”“女”“男”“女”

33“女”“男”“女”“女”“男”“女”“男”“女”

49“女”“男”“女”“男”

65“男”“女”“男”“女”“男”

$V3 1 "出生日期“"1948/05/28”"1952/03/27“1994/12/09”"1969/08/02“"1982/03/01”"1983/08/03“"1988/08/25”9 "1979/07/10“"1949/10/20”"1951/10/21“1987/06/06”1947/07/19“"1982/02/19”1946/03/20“"1979/06/06”17 "1956/03/07“"1957/08/11”1956/12/07“"1971/04/06”"1952/04/ 25“"1986/10/24”"1966/10/26“"1964/06/07”25 "1993/03/09“"1944/01/06”"1986/12/06“"1965/11/21”"1970/01/29“"1987/11/16“"1979/10/03”"1961/05/28“33 "1969/06/24”"1979/05/15“"2011/02/25”"1980/01/01“"1984/06/18”"有待确认“"1987/04/13”1983/05/09“41 "1956/12/17”1982/11/07“1980/08/09”1945/12/19“"1958/05/18”"1987/02/06“"1982/12/03”"1985/07/16“49 "1983/07/19”"1987/11/06“"1984/04/14”"1979/05/22“"1973/05/05”"1985/10/26“"1954/03/26”"1984/11/12“57 "1987/03/27”"1980/05/25“"1949/05/10“"1981/12/26”“1974年/08/13”"1938/01/22“"1968/02/29”"1942/05/22“65 "1935/04/21”"1981/10/14“"1957/03/28”"1985/08/20“"1981/12/25”"1957/08/01“"1942/08/02”"1983/06/15“73 "1950/01/01”“1974年/04/26“"1944/08/23”"1976/10/12“"1988/01/18”"1954/04/06“

代码语言:javascript
复制
 View(df_ch)

代码语言:javascript
复制
 View(df_utf8)

在RGui (64位)中

视图(Df_ch)

视图(Df_utf8)

好消息是,您拥有utf8格式的所有数据,可用于进一步的数据分析。

分析完成后,您可以将locale改回"chinese“

代码语言:javascript
复制
  Sys.setlocale(category="LC_ALL", locale = "chinese")

  Sys.getlocale(category="LC_ALL")

 [1] "LC_COLLATE=Chinese (Simplified)_People's Republic of China.936;LC_CTYPE=Chinese   (Simplified)_People's Republic of China.936;LC_MONETARY=Chinese (Simplified)_People's Republic of China.936;LC_NUMERIC=C;LC_TIME=Chinese (Simplified)_People's Republic of China.936"

您可能需要探索一些函数,以便在字符串编码之间进行转换。

Encoding()

iconv()

HTH

票数 26
EN

Stack Overflow用户

发布于 2014-04-05 14:46:05

尝试对read.table使用不同的参数:fileEncoding

代码语言:javascript
复制
 read.table("test.utf8", sep = "," , header=TRUE, fileEncoding = "UTF-8")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22876746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档