R出错问题(持续更新)
2020-07-08 本文已影响0人
冬之心
数据管理
.csv导入R,首变量出现乱码。
> enr <- read.csv("c:/users/wintryheart/desktop/enroll.csv")
> head(enr)
锘縴ear lowest plevel class subject
1 2019 368 339 AB arts
2 2019 355 339 BB arts
3 2018 366 337 AB arts
4 2018 351 337 BB arts
5 2017 359 333 AB arts
6 2017 339 333 BB arts
- 加上参数
encoding="UTF-8"
,仍有错误。
> enr <- read.csv("c:/users/wintryheart/desktop/enroll.csv",encoding="UTF-8")
> head(enr)
X.U.FEFF.year lowest plevel class subject
1 2019 368 339 AB arts
2 2019 355 339 BB arts
3 2018 366 337 AB arts
4 2018 351 337 BB arts
5 2017 359 333 AB arts
6 2017 339 333 BB arts
出错原因
Excel在保存为.csv文件时,选择了“保存类型”为“CSV UTF-8 (逗号分隔) (*.csv)”。
解决办法
选择“保存类型”为“CSV (逗号分隔) (*.csv)”。
读取含中文的EXCEL文件,分列错误和中文乱码
结论
读取含中文的EXCEL文件,最好使用readxl包
中的read_excel()
函数。
第一种EXCEL保存方式
Excel在保存为.csv文件时,选择了“保存类型”为“CSV UTF-8 (逗号分隔) (*.csv)”。
- 出现错误
library(foreign)
data1 <- read.csv("C:\\Users\\wintryheart\\Desktop\\foreign2.csv", encoding = "utf-8")
data1
## 锘縮ubject name chx cxh cx lyl lss
## 1 澶栬100 璇歌憶浜\xae,80 90 85 85 80 NA
## 2 澶栬100 闄堝渾鍦\x86,80 85 90 75 75 NA
## 3 澶栬100 鍚撮棣\x99,85 90 85 75 75 NA
## 4 澶栬100 鏉庝笘姘\x91,85 95 75 75 70 NA
## 5 澶栬100 寮犻 80 90 70 70 70
## 6 澶栬100 鏉庣師 80 90 65 75 70
## 7 澶栬100 鎴愰緳 80 85 60 75 70
## 8 澶栬100 鐜嬩粰鑺\x9d,85 95 80 70 90 NA
data1 <- read.csv("C:\\Users\\wintryheart\\Desktop\\foreign2.csv", encoding = "UTF-8")
data1
## X.U.FEFF.subject name chx cxh cx lyl lss
## 1 外语100 诸葛亮,80 90 85 85 80 NA
## 2 外语100 陈圆圆,80 85 90 75 75 NA
## 3 外语100 吴香香,85 90 85 75 75 NA
## 4 外语100 李世民,85 95 75 75 70 NA
## 5 外语100 张飞 80 90 70 70 70
## 6 外语100 李玟 80 90 65 75 70
## 7 外语100 成龙 80 85 60 75 70
## 8 外语100 王仙芝,85 95 80 70 90 NA
- 错误描述
-
乱码错误:原定义encoding="utf-8",更正为encoding="UTF-8",乱码问题解决。
-
分列错误:第二列字符不相等。若均为两个中文字,则能正确分列;三个以上中文字,仍不能正确分列。 没找到解决方法。
第二种EXCEL保存方式
Excel在保存为.csv文件时,选择“保存类型”为“CSV (逗号分隔) (*.csv)”。
library(foreign)
data1 <- read.csv("C:\\Users\\wintryheart\\Desktop\\foreign1.csv", encoding = "UTF-8")
data1
## subject name chx cxh cx lyl lss
## 1 <cd><e2><d3><ef>100 <d6><ee><U+00B8><f0><c1><c1> 80 90 85 85 80
## 2 <cd><e2><d3><ef>100 <U+00B3><c2><U+0532><U+0532> 80 85 90 75 75
## 3 <cd><e2><d3><ef>100 <ce><e2><cf><e3><cf><e3> 85 90 85 75 75
## 4 <cd><e2><d3><ef>100 <c0><ee><ca><c0><c3><f1> 85 95 75 75 70
## 5 <cd><e2><d3><ef>100 <d5><U+0177><c9> 80 90 70 70 70
## 6 <cd><e2><d3><ef>100 <c0><ee><e7><e4> 80 90 65 75 70
## 7 <cd><e2><d3><ef>100 <U+00B3><c9><c1><fa> 80 85 60 75 70
## 8 <cd><e2><d3><ef>100 <cd><f5><cf><c9><U+05A5> 85 95 80 70 90
data1 <- read.csv("C:\\Users\\wintryheart\\Desktop\\foreign1.csv", encoding = "utf-8")
data1
## subject name chx cxh cx lyl lss
## 1 外语100 诸葛亮 80 90 85 85 80
## 2 外语100 陈圆圆 80 85 90 75 75
## 3 外语100 吴香香 85 90 85 75 75
## 4 外语100 李世民 85 95 75 75 70
## 5 外语100 张飞 80 90 70 70 70
## 6 外语100 李玟 80 90 65 75 70
## 7 外语100 成龙 80 85 60 75 70
## 8 外语100 王仙芝 85 95 80 70 90
- 错误描述
-
当保存方式“CSV (逗号分隔) (*.csv)”时,定义encoding = "UTF-8",无法修正乱码。
。 -
原定义encoding="UTF-8",更正为encoding="utf-8",乱码问题解决。无分列错误问题。
第三种保存方式
测试文件使用EXCEL2016默认保存格式.xlsx
- 解决方案:使用readxl包。readxl包各个系统都通用,用于读取数据十分方便,支持中文。
library(readxl)
data1 <- read_excel("C:\\Users\\wintryheart\\Desktop\\foreign3.xlsx", sheet="foreign")
data1
## # A tibble: 8 x 7
## subject name chx cxh cx lyl lss
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 外语100 诸葛亮 80 90 85 85 80
## 2 外语100 陈圆圆 80 85 90 75 75
## 3 外语100 吴香香 85 90 85 75 75
## 4 外语100 李世民 85 95 75 75 70
## 5 外语100 张飞 80 90 70 70 70
## 6 外语100 李玟 80 90 65 75 70
## 7 外语100 成龙 80 85 60 75 70
## 8 外语100 王仙芝 85 95 80 70 90