read.csv()的输出

hba*_*bar 5 csv r

我一直在尝试将一个csv加载到R进行一些处理,但是在尝试读取数据本身时我遇到了一个奇怪的问题.

csv没有任何标题,我使用以下简单的代码来读取数据

newClick <- read.csv("test.csv", header = F)
Run Code Online (Sandbox Code Playgroud)

以下是样本数据集:

10000011791441224671,V_Display,exit
10000011951441812316,V_Display,exit
10000013211441319797,V_Display,exit
1000001331441725509,V_Display,exit
10000013681418242863,C_GoogleNonBrand,V_Display,V_Display,V_Display,V_Display,_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,exit
10000014031441295393,V_Display,exit
Run Code Online (Sandbox Code Playgroud)

该数据的输出是6 obs的预期数据帧.18个变量.

然而,这是棘手的部分.如果我在数据集中添加另一行,例如

10000011791441224671,V_Display,exit
10000011951441812316,V_Display,exit
1000000191441228436,V_Display,exit
10000013211441319797,V_Display,exit
1000001331441725509,V_Display,exit
10000013681418242863,C_GoogleNonBrand,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,exit
10000014031441295393,V_Display,exit
Run Code Online (Sandbox Code Playgroud)

这个输出是一个奇怪的12个3个变量.仔细分析后,我意识到整个倒数第二行被分为6行,每行有三列,这很奇怪.

有什么想法吗?

Ric*_*ven 3

正如评论中提到的,发生这种情况是因为列数是由输入的前五行决定的。如果您遇到麻烦,这里有一个可能的解决方法,我已经测试过并且似乎运行良好。秘诀是输入一个向量,col.names该向量是数据中列数的长度。我们可以使用 来获取列数count.fields()。插入您的文件名file

## get the number of columns
ncols <- max(count.fields(file, sep = ","))
## read the data with all columns as character
df <- read.csv(file, header = FALSE, col.names = paste0("V", seq_len(ncols)))
Run Code Online (Sandbox Code Playgroud)

这是使用您的数据进行测试的代码:

txt <- "10000011791441224671,V_Display,exit\n10000011951441812316,V_Display,exit\n1000000191441228436,V_Display,exit\n10000013211441319797,V_Display,exit\n1000001331441725509,V_Display,exit\n10000013681418242863,C_GoogleNonBrand,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,exit\n10000014031441295393,V_Display,exit"

ncols <- max(count.fields(textConnection(txt), sep = ","))
df <- read.csv(text = txt, header = FALSE, col.names = paste0("V", seq_len(ncols)))
dim(df)
# [1]  7 18
Run Code Online (Sandbox Code Playgroud)