簡體   English   中英

如何讀取包含R中逗號的值的csv?

[英]How to read csv with values containing commas in R?

我有一個工具(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個部分,將最后一個字符串保留為單個字符串。

為每個列指定類似乎適用於我的情況。 因此,如果您有4列,第4列可能有不同數量的逗號,請嘗試以下操作:

theData <- read.table(filepath, colClasses=rep("character" ,4))

當然,根據您的情況調整列數及其類別。 這是我在玩具csv文件上得到的:

> read.table("tmp.csv", colClasses=rep("character" ,4), header=FALSE)
  V1 V2 V3    V4
1 A, B, C,   1&2
2 A, C, C, 1,2,3
3 A, V, X,    12
4 A, V, D,   1,0

另一個選擇是使用帶有fill=TRUE參數的read.csv

theData <- read.csv(filepath, fill=TRUE)

這將生成一個data.frame ,其列數等於具有最大逗號數的行。 然后,您必須手動將這些拆分逗號合並為一個。

注意:這將適用於只有最后一列可以有逗號的松散的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM