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中有限数量的列
您可以像这样读取数据:
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)
这导致列表.