使用read.csv读取葡萄酒数据集时str()输出格式异常的问题排查
问题分析与解决
你执行了以下R命令:
read_csv = read.csv('D:/winequality-white.csv', stringsAsFactors=FALSE) str(read_csv)
得到的结果是所有数据被合并成了一个单列的data.frame:
'data.frame': 4898 obs. of 1 variable: $ fixed.acidity.volatile.acidity.citric.acid.residual.sugar.chlorides.free.sulfur.dioxide.total.sulfur.dioxide.density.pH.sulphates.alcohol.quality: chr "7;0.27;0.36;20.7;0.045;45;170;1.001;3;0.45;8.8;6" "6.3;0.3;0.34;1.6;0.049;14;132;0.994;3.3;0.49;9.5;6" "8.1;0.28;0.4;6.9;0.05;30;97;0.9951;3.26;0.44;10.1;6" "7.2;0.23;0.32;8.5;0.058;47;186;0.9956;3.19;0.4;9.9;6" ...
但你期望得到多列结构的data.frame,示例如下:
'data.frame': 4 obs. of 4 variables: $ id : int 10 11 12 13 $ name : chr "sai" "ram" NA "sahithi" $ dob : chr "1990-10-02" "1981-03-24" "1987-06-14" "1985-08-16" $ gender: chr "M" "" "F" "F"
问题根源
这个葡萄酒质量数据集的字段分隔符是分号(;),但read.csv()函数默认使用逗号(,)作为分隔符,导致R把每一行的所有内容识别成了单个字段,最终所有列被合并成了一列。
解决办法
只需指定正确的分隔符即可,以下几种方式都能解决:
方式1:给read.csv添加sep参数
直接在read.csv里指定分隔符为分号:
read_csv = read.csv('D:/winequality-white.csv', stringsAsFactors=FALSE, sep = ";") str(read_csv)
方式2:使用read.csv2函数
read.csv2是专门为使用分号作为分隔符的数据集设计的,默认分隔符就是;,直接用它读取即可:
read_csv = read.csv2('D:/winequality-white.csv', stringsAsFactors=FALSE) str(read_csv)
方式3:使用read.delim指定分隔符
也可以用read.delim,手动指定分隔符为分号:
read_csv = read.delim('D:/winequality-white.csv', stringsAsFactors=FALSE, sep = ";") str(read_csv)
执行任意一种方式后,你就能得到符合预期的多列data.frame结构。
内容的提问来源于stack exchange,提问作者annd
相关产品推荐
相关产品推荐

