r - 如何使用R中包含逗号的值读取csv?

标签 r csv read.csv

我有一个工具(提供给我的 exe),它输出格式错误的 csv。它们的缺点是最后一个值可以有逗号,没有引号,例如:

184500,OBJECT_CALENDAR,,,UNITS_NO_UNITS,NULL,,,,Sched N&S B1,1st,3rd,4S,5th&6th

最后一个字符串实际上从“Sched”开始,所以我希望看到这样的东西:
184500,OBJECT_CALENDAR,,,UNITS_NO_UNITS,NULL,,,,"Sched N&S B1,1st,3rd,4S,5th&6th"

这搞砸了我正在尝试做的一切,我很好奇如何解决它。有没有办法在 read.csv 中定义列数?

我试图逐行阅读它,但它很慢,而且不够优雅:
processFile = function(filepath) {
  i = 1
  vector = character(0)
  theFile = file(filepath, "r")
  while ( TRUE ) {
    line = readLines(theFile, n = 1)
    if ( length(line) == 0 ) {
      break
    } else {
      vector[i] <- line
      i = i+1
    }
  }
  close(theFile)
  formatted <- lapply(strsplit(vector[-1],','), function(x) {c(x[1:9], paste(x[10:length(x)], collapse = ','))})
  finalFrame <- as.data.frame(matrix(unlist(formatted),ncol = 10, byrow = TRUE))
  return(finalFrame)
}

有没有更好的方法来做到这一点?任何可以做到这一点的基本函数,如果没有,任何库?

最佳答案

这并不理想,因为您仍然必须逐行读取文件,但是stringr::str_split有一个参数 n指定最大分割数。如果您设置 pattern = ","n=10 ,然后它会将您的字符串拆分为仅 10 段,而将最后一个块保留为单个字符串。

关于r - 如何使用R中包含逗号的值读取csv?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49438155/

相关文章:

Python:csv.Dictreader 列上的额外逗号

r - 读取 csv 文件时多次跳过

r - read.csv中的动态NROW变量,如何选择所有行?

r - 如何指定emacs中ESS session 打开的R版本?

R:如何识别未知数的组合?

r - 在 ggplot 中为美学之外的组添加 hline

python - 使用python查找CSV文件每一列的最小值

ios - 如何增加 .csv 中的行数

python - 如何使用 Pandas 读取 CSV,并且只将其读入 1 列而没有 Sep 或 Delimiter

r - 计算数据子集中可​​变长度序列的重复次数