我刚刚将readr软件包从版本0.1.1 更新到0.2.0,但现在在抛出错误之前有效的操作.
在更新之前,我使用readr包执行此操作:
file.list <- list.files(<path>, pattern='*.csv')
df.list <- lapply(file.list, read_csv2)
df.list <- lapply(df.list, function(x) x[-1,])
Run Code Online (Sandbox Code Playgroud)
最后一步是必要的,因为我有一些带有特殊字符的长标题,以某种方式导致额外的行被读取.这是另一个问题,但只是删除第一行一直工作到那时.
read_csv2 警告我有关列名称的问题但是,如上所述,我通过删除行来修复:
Warning: 1 parsing failure.
row col expected actual
1 -- 227 columns 222 columns
Run Code Online (Sandbox Code Playgroud)
然后我继续将所有数据帧绑定到一个dplyr::bind_rows(因为每个.csv具有相同的头).这之前完美无缺,但现在当我这样做时,我得到了
> full.data <- bind_rows(df.list)
Error: corrupt data frame
Run Code Online (Sandbox Code Playgroud)
我没有改变任何其他东西(相同的R版本,相同的RStudio版本,没有更新其他包).有经验的人有什 与read_csv2的工作方式相比,版本0.1.1有任何重大变化.
谢谢
显然我的问题的原因是因为orginial .csv文件中的readr版本0.2.0空单元格会自动转换为NA.虽然如果所有标题实际上都没有丢失,这可能是你想要99%的时间,但当你的一个列标题为空时,这是相当繁琐的.事实上,我的原始文件确实包含空标题(因为这些文件真的不是你所谓的"整洁").
所以在读完我的.csv文件之后,lapply(file.list, read_csv2)我每个data.frame至少有一个列,它的NA列标题bind_rows(df.list)真的不喜欢.这可能是合理的,NA无论如何都不应该在列标题中.但是,正如这里所指出的,我认为readr应该有一些选项来解决空列标题的存在(或者至少抛出一个有意义的警告),特别是因为它也是我在这里提到的另一个错误的原因.