R在列中用逗号读取csv
R read csv with comma in column
更新2020-5-14
使用来自 here 的不同但相似的数据集,我发现 read_csv
似乎工作正常。不过我还没有用原始数据试过。
虽然因为我的问题不对,回复并没有解决问题,但是Shan的回复最符合我发的原问题,所以我采纳了他的回答。
更新2020-5-12
我觉得我原来的问题不对。如评论中所述,引用了数据。尽管更改分隔符使 R 中的 11582 行看起来与 excel 中的 11583 行相同,但这并不意味着它是 "right"。可能由于编码不当或其他原因导致一些不正确的行切换,从而导致某些列被替换。如果我用记事本++打开数据,excel中第11583行的实例在第11596行。
原题
我正在尝试将 listings.csv
从 this dataset in kaggle 读入 R。我下载了文件并编写了代码 read.csv('listing.csv')
。第一列,id
列应该是数字。但是,它显示:
listing$id[1:10]
[1] 2015 2695 3176 3309 7071 9991 14325 16401 16644 17409
13129 Levels: Ole Berl穩n!,16736423,Nerea,Mitte,Parkviertel,52.55554132116211,13.340658248460871,Entire home/apt,36,6,3,2018-01-26,0.16,1,279\n17312576,Great 2 floor apartment near Friederich Str MITTE,116829651,Selin,Mitte,Alexanderplatz,52.52349354926847,13.391003496971203,Entire home/apt,170,3,31,2018-10-13,1.63,1,92\n17316675,80簡 m of charm in 3 rooms with office space,116862833,Jon,Neuk繹lln,Schillerpromenade,52.47499080234379,13.427509313575928...
我认为是因为第二列中有带逗号的值。例如,用 MiCrosoft excel 打开文件,我可以看到第二列中的一个值是 Ole,Ole...
:
当某些值包含逗号时,如何将 csv 文件正确读入 R?
由于您可以访问 Excel 中的数据,因此您可以在 Excel 中使用逗号 (,) 以外的分隔符 'Save As'。首先进入控制面板-> 区域和语言-> 附加设置,您可以更改"List Seperator"。除逗号外,最常见的符号是竖线符号 (|)。在 R 中,当您 read_csv 时,将分隔符指定为“|”。
你可以试试这个吗?
lsitings <- read.csv("listings.csv", stringsAsFactors = FALSE)
listings$name <- gsub(",","", listings$name) - 这将删除 Col name 中的逗号
如果您不需要第二列中的信息,那么您始终可以在导入到 R 之前将其删除(在 Excel 中)。read.csv
函数调用 scan
,也可以使用 colClasses
参数省略不需要的列。但是,data.table 包中的 fread
函数使用 drop
参数可以更简单地完成此操作:
library(data.table)
listings <- fread("listings.csv", drop=2)
如果您确实需要该列中的信息,则需要其他方法(参见其他解决方案)。
更新2020-5-14
使用来自 here 的不同但相似的数据集,我发现 read_csv
似乎工作正常。不过我还没有用原始数据试过。
虽然因为我的问题不对,回复并没有解决问题,但是Shan的回复最符合我发的原问题,所以我采纳了他的回答。
更新2020-5-12
我觉得我原来的问题不对。如评论中所述,引用了数据。尽管更改分隔符使 R 中的 11582 行看起来与 excel 中的 11583 行相同,但这并不意味着它是 "right"。可能由于编码不当或其他原因导致一些不正确的行切换,从而导致某些列被替换。如果我用记事本++打开数据,excel中第11583行的实例在第11596行。
原题
我正在尝试将 listings.csv
从 this dataset in kaggle 读入 R。我下载了文件并编写了代码 read.csv('listing.csv')
。第一列,id
列应该是数字。但是,它显示:
listing$id[1:10]
[1] 2015 2695 3176 3309 7071 9991 14325 16401 16644 17409
13129 Levels: Ole Berl穩n!,16736423,Nerea,Mitte,Parkviertel,52.55554132116211,13.340658248460871,Entire home/apt,36,6,3,2018-01-26,0.16,1,279\n17312576,Great 2 floor apartment near Friederich Str MITTE,116829651,Selin,Mitte,Alexanderplatz,52.52349354926847,13.391003496971203,Entire home/apt,170,3,31,2018-10-13,1.63,1,92\n17316675,80簡 m of charm in 3 rooms with office space,116862833,Jon,Neuk繹lln,Schillerpromenade,52.47499080234379,13.427509313575928...
我认为是因为第二列中有带逗号的值。例如,用 MiCrosoft excel 打开文件,我可以看到第二列中的一个值是 Ole,Ole...
:
当某些值包含逗号时,如何将 csv 文件正确读入 R?
由于您可以访问 Excel 中的数据,因此您可以在 Excel 中使用逗号 (,) 以外的分隔符 'Save As'。首先进入控制面板-> 区域和语言-> 附加设置,您可以更改"List Seperator"。除逗号外,最常见的符号是竖线符号 (|)。在 R 中,当您 read_csv 时,将分隔符指定为“|”。
你可以试试这个吗?
lsitings <- read.csv("listings.csv", stringsAsFactors = FALSE)
listings$name <- gsub(",","", listings$name) - 这将删除 Col name 中的逗号
如果您不需要第二列中的信息,那么您始终可以在导入到 R 之前将其删除(在 Excel 中)。read.csv
函数调用 scan
,也可以使用 colClasses
参数省略不需要的列。但是,data.table 包中的 fread
函数使用 drop
参数可以更简单地完成此操作:
library(data.table)
listings <- fread("listings.csv", drop=2)
如果您确实需要该列中的信息,则需要其他方法(参见其他解决方案)。