首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >read.csv()的输出

read.csv()的输出
EN

Stack Overflow用户
提问于 2016-02-17 07:05:22
回答 2查看 932关注 0票数 5

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

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

代码语言:javascript
复制
newClick <- read.csv("test.csv", header = F)

以下是示例数据集:

代码语言:javascript
复制
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

该数据的输出为预期的6倍的数据帧。18个变量。

然而,这里有一个棘手的部分。如果我在数据集中添加另一行,如下所示

代码语言:javascript
复制
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倍的输出。经过仔细分析,我意识到整个第二行被划分为6行,每个列有三列,这是很奇怪的。

对此有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-17 07:27:37

正如注释中提到的,这是因为列的数量由输入的前五行决定。如果你陷入困境,这里有一个可能的解决办法,我已经测试过了,而且似乎运行良好。秘诀是为col.names输入一个向量,即数据中列数的长度。我们可以使用count.fields()获得列数。插入file的文件名。

代码语言:javascript
复制
## 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)))

下面是使用数据进行测试的代码:

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2016-02-17 07:38:04

根据R文件

数据列的数量取决于>input的前五行(或者如果它小于五行的话是整个输入),或者如果它被指定并且更长,则从>col.names的长度来确定。如果>fill或blank.lines.skip是真的话,这可能是错误的,所以如果必要的话请指定col.names

由于前5行包含第一个示例中的更广泛的观察,而不是在第二个示例中,因此dataset在第一个示例中正确地出现,并在第二个示例中被包装到单独的行中。

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35450021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档