read.csv 后的列名加一(原因是尾随逗号)

Column names out by one after read.csv (cause is trailing comma)

我有以下最小 .csv 文件:

"Sl.no","Col1","Col2","Col3"
"1","one","two","three",
"2","A","B","C",

当我在 Excel 或 Google 表格中打开它时,文件被正确导入。

当我使用

将其导入 RStudio 中的 R
temp <-  read.csv("file.csv", header = TRUE)

我在 temp 中看到以下内容:

第 headers 列小一。

当我删除第二行和第三行中的逗号时,即导入此文件:

"Sl.no","Col1","Col2","Col3"
"1","one","two","three"
"2","A","B","C"

文件读取正确,temp的结果是

问题:

我建议采用不同的方法,使用 readr 包中的 read_csv

library(readr) 
temp <- read_csv("file.csv")

temp
# A tibble: 2 x 4
  Sl.no Col1  Col2  Col3 
  <int> <chr> <chr> <chr>
1     1 one   two   three
2     2 A     B     C 

使用的数据:

"Sl.no","Col1","Col2","Col3"
"1","one","two","three",
"2","A","B","C",

您可以尝试使用 gsub 添加尾随逗号,然后使用 read.csv

阅读
edited <- gsub(",,", ",", paste0(readLines("~/Desktop/file.csv"), ","), fixed = TRUE)
read.csv(textConnection(edited), header = TRUE, stringsAsFactors = FALSE)[1:4]
#>   Sl.no Col1 Col2  Col3 
#> 1     1  one  two three 
#> 2     2    A    B     C 

解释:首先你使用readLines导入文本"as is"。接下来使用 paste0 在每行的末尾添加一个逗号。之后,将“,”的所有实例替换为“,”。最后,您使用 textConnectionread.csv 来读取文件。请注意,我将 [1:4] 设置为仅读取前 4 列。出于某种原因,我一直得到一个空白的第五列(可能是因为我编写 csv 文件的方式)。