Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
read.csv()的输出_R_Csv - Fatal编程技术网

read.csv()的输出

read.csv()的输出,r,csv,R,Csv,我一直在尝试将csv加载到R中进行一些处理,但在尝试读取数据本身时遇到了一个奇怪的问题 csv没有任何标题,我使用以下简单代码读取数据 newClick <- read.csv("test.csv", header = F) 该数据的输出为6个obs的预期数据帧。共有18个变量 然而,这里是棘手的部分。如果我在数据集中添加另一行,如 10000011791441224671,V_Display,exit 10000011951441812316,V_Display,exit 100000

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

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

newClick <- read.csv("test.csv", header = F)
该数据的输出为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
这是一个奇怪的3个变量的12 obs输出。经过仔细分析,我意识到最后一行被分成6行,每行有三列,这很奇怪


对此有何想法?

如评论中所述,出现这种情况是因为列的数量由输入的前五行决定。如果您遇到了麻烦,这里有一个可能的解决方法,我已经测试过,并且运行良好。秘密在于为
col.names
输入一个向量,即数据中列数的长度。我们可以使用
count.fields()
获得列数。插入
文件的文件名

## 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)))
##获取列数
ncols

“数据列的数量是通过查看>输入的前五行(如果少于五行,则为整个输入)或>列名称的长度(如果指定了且更长)来确定的。如果>fill或blank.lines.skip为真,则可能是错误的,因此在必要时指定列名称。”

因为在第一个示例中,前5行包含较宽的观察值,而在第二个示例中不包含,所以数据集在第一个示例中正确地进入,并在第二个示例中被包装到单独的行中


确保不会发生这种情况的方法是在CSV中添加列标题,或者使用read.CSV函数的col.name参数定义适当数量的列。

来自
?read.table
通过查看输入的前五行来确定数据列的数量(如果输入少于五行,则为整个输入),如果指定了“col.names”,则为“col.names”的长度,且长度较长
@Nicola Thankss一旦基本正确,就很容易理解图片的其余部分。
## 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)))
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