如何在R中读取具有不同列数的CSV文件

Com*_*ist 41 csv import r read.table sparse-columns

我有一个稀疏数据集,其列数以csv格式变化.以下是文件文本的示例.

12223, University
12227, bridge, Sky
12828, Sunset
13801, Ground
14853, Tranceamerica
14854, San Francisco
15595, shibuya, Shrine
16126, fog, San Francisco
16520, California, ocean, summer, golden gate, beach, San Francisco
Run Code Online (Sandbox Code Playgroud)

我用的时候

read.csv("data.txt", header = F)
Run Code Online (Sandbox Code Playgroud)

R将数据集解释为具有3列,因为大小是从前5行确定的.无论如何强制r将数据放在更多列中?

Blu*_*ter 59

?read.table文档深入介绍以下内容:

数据列的数量是通过查看前五行输入(或整个文件,如果它少于五行),或者从col.names指定的长度(如果指定的长度)来确定的.如果fill或者blank.lines.skip are true,这可能是错误的,col.names如果需要,也可以指定(如'示例').

因此,让我们定义col.names为长度X(其中X是数据集中字段的最大数量),并设置fill = TRUE:

dat <- textConnection("12223, University
12227, bridge, Sky
12828, Sunset
13801, Ground
14853, Tranceamerica
14854, San Francisco
15595, shibuya, Shrine
16126, fog, San Francisco
16520, California, ocean, summer, golden gate, beach, San Francisco")

read.table(dat, header = FALSE, sep = ",", 
  col.names = paste0("V",seq_len(7)), fill = TRUE)

     V1             V2             V3      V4           V5     V6             V7
1 12223     University                                                          
2 12227         bridge            Sky                                           
3 12828         Sunset                                                          
4 13801         Ground                                                          
5 14853  Tranceamerica                                                          
6 14854  San Francisco                                                          
7 15595        shibuya         Shrine                                           
8 16126            fog  San Francisco                                           
9 16520     California          ocean  summer  golden gate  beach  San Francisco
Run Code Online (Sandbox Code Playgroud)

如果最大字段数未知,您可以使用nifty实用程序函数count.fields(我在read.table示例代码中找到):

count.fields(dat, sep = ',')
# [1] 2 3 2 2 2 2 3 3 7
max(count.fields(dat, sep = ','))
# [1] 7
Run Code Online (Sandbox Code Playgroud)

可能有用的相关阅读:仅读取R中有限数量的列


Rol*_*and 7

您可以像这样读取数据:

dat <- textConnection("12223, University
12227, bridge, Sky
12828, Sunset
13801, Ground
14853, Tranceamerica
14854, San Francisco
15595, shibuya, Shrine
16126, fog, San Francisco
16520, California, ocean, summer, golden gate, beach, San Francisco")

dat <- readLines(dat)
dat <- strsplit(dat, ",")
Run Code Online (Sandbox Code Playgroud)

这导致列表.

  • 我拥有的数据量很大.我正在寻找一个解决方案,而无需复制和粘贴文件的内容.我知道我可以在ruby中打开文件并在一行中搜索最大量的逗号并将该行移动到第一行.然后,我可以在R中打开文件,所有都将被解决,但我希望在R中有一个简单的解决方案. (2认同)
  • 好吧,显然你会使用文件连接(读"连接").但我无法访问您的文件... (2认同)
  • @CompChemist把你的文件对象(`data.txt`)代替`dat`.`textConnection`用于快速读取您的示例文件. (2认同)