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
的结果是
问题:
.csv
文件中是否允许尾随逗号?如果不是,Excel 和 Google 床单只是宽容吗?
- 如何删除逗号?我熟悉
regex
,但不确定如何将更改作为文本文件然后读取为 .csv
我建议采用不同的方法,使用 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
在每行的末尾添加一个逗号。之后,将“,”的所有实例替换为“,”。最后,您使用 textConnection
和 read.csv
来读取文件。请注意,我将 [1:4] 设置为仅读取前 4 列。出于某种原因,我一直得到一个空白的第五列(可能是因为我编写 csv 文件的方式)。
我有以下最小 .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
的结果是
问题:
.csv
文件中是否允许尾随逗号?如果不是,Excel 和 Google 床单只是宽容吗?- 如何删除逗号?我熟悉
regex
,但不确定如何将更改作为文本文件然后读取为.csv
我建议采用不同的方法,使用 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
在每行的末尾添加一个逗号。之后,将“,”的所有实例替换为“,”。最后,您使用 textConnection
和 read.csv
来读取文件。请注意,我将 [1:4] 设置为仅读取前 4 列。出于某种原因,我一直得到一个空白的第五列(可能是因为我编写 csv 文件的方式)。