我一直试图将csv加载到R中,以便进行一些处理,但在读取数据本身时,我遇到了一个奇怪的问题。
csv没有任何标题,我使用以下简单代码读取数据
newClick <- read.csv("test.csv", header = F)以下是示例数据集:
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个变量。
然而,这里有一个棘手的部分。如果我在数据集中添加另一行,如下所示
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行,每个列有三列,这是很奇怪的。
对此有什么想法吗?
发布于 2016-02-17 07:27:37
正如注释中提到的,这是因为列的数量由输入的前五行决定。如果你陷入困境,这里有一个可能的解决办法,我已经测试过了,而且似乎运行良好。秘诀是为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)))下面是使用数据进行测试的代码:
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发布于 2016-02-17 07:38:04
根据R文件,
数据列的数量取决于>input的前五行(或者如果它小于五行的话是整个输入),或者如果它被指定并且更长,则从>col.names的长度来确定。如果>fill或blank.lines.skip是真的话,这可能是错误的,所以如果必要的话请指定col.names
由于前5行包含第一个示例中的更广泛的观察,而不是在第二个示例中,因此dataset在第一个示例中正确地出现,并在第二个示例中被包装到单独的行中。
确保这种情况不会发生的方法是在CSV中添加列标题,或者使用col.name函数的read.csv参数定义适当的列数。
https://stackoverflow.com/questions/35450021
复制相似问题