gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 14:37:58 27 4
gpt4 key购买 nike

我的系统:win7 + R-3.0.2。

> 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"


在Microsoft记事本中保存了两个具有相同内容的文件: one被保存为ansi格式, the other被保存为utf8格式。数据是M370马来西亚航空中的死亡名称。
或者,您可以通过这种方式创建文件。

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

乘客姓名,性别,出生日期
HuangTianhui,男,1948/05/28
姜翠云,女,1952/03/27
李红晶,女,1994/12/09


2)将其保存为test.ansi,并在记事本中使用ansi格式。
3)将其以utf-8格式另存为test.utf8。

read.table("test.ansi",sep=",",header=TRUE)  #can work fine
read.table("test.utf8",sep=",",header=TRUE) #can't work


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

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中,它是如此简单

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的一行时,无法正确显示。

最佳答案

作业系统:Windows-7(64-bit)

R版本:

package_version(R.version)

[1] ‘3.0.2’


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

  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"


使用中文编码读取数据

 df_ch <- read.table("test.utf8",
sep=",",
header=FALSE,
encoding="chinese",
stringsAsFactors=FALSE
)


使用UTF-8编码读入数据

 df_utf8 <- read.table("test.utf8",
sep=",",
header=FALSE,
encoding="UTF-8",
stringsAsFactors=FALSE
)


在RStudio 0.98.501中

 df_ch$V1[1]

[1] "乘客姓å"

df_utf8$V1[1]

[2] "乘客姓名"

df_utf8$V1

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


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

  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>


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

as.character(df_utf8[1,])

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

as.character(df_utf8[2,])

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


通过将数据帧转换为列表并强制将数据转换为字符格式,可以显示具有国际字符的多列数据。



  df_utf8_ch <- lapply(df_utf8, as.character)

df_utf8_ch


$ V1
1“乘客姓名”“ HuangTianhui”“姜翠云”“李红晶”“ LuiChing”“宋飞飞”
7“唐旭东”“杨家堡”“买买提江·阿布拉”“安文兰”“鲍媛华”“边亮京”
[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”


 View(df_ch)




 View(df_utf8)




在RGui(64位)中



查看(df_ch)



查看(df_utf8)



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

分析完成后,您可以将区域设置更改回“中文”

  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()

高温超导

关于r - 如何在R中读取utf-8格式的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22876746/

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