行末额外的逗号导致使用read.csv和read.table时出现错误

4
我正在尝试将这个.csv文件读入R中。当我使用read.csv时,我要么会得到与row.names相关的错误,要么列名偏离了它们原来的列。根据这篇帖子,我认为问题与每行末尾有一个额外逗号有关。但我在之前的回答中找不到如何去掉行末逗号的方法。
我的解决方法是执行以下操作:
pmr <-read.csv("pubmed_result.csv", header = T, row.names = NULL)
colnames(pmr) <- c(colnames(pmr)[2:ncol(pmr)], "blank")
pmr <- pmr[1:ncol(pmr)-1]

这提供了所需的结果,但似乎有点不够优雅。有没有办法让read.csv或read.table忽略最后一个逗号?或者有没有办法使用gsub来修复csv文件?

你可以尝试使用data.table包中的fread函数来读取你的文件吗? - MichaelChirico
fread也能读入数据,但名称会偏移一个位置。read_csv 能正确解析。 - Harlan Nelson
1个回答

7
您的评估是正确的,末尾的逗号引起了问题。准确地说,数据行末尾有逗号,但声明列名的行末尾没有逗号。
如果您不想像上面的代码一样手动修复问题,可以使用readr::read_csv
library(tidyverse);
df <- read_csv("pubmed_result.csv");
df;
    ## A tibble: 375 x 11
#   Title   URL    Description  Details  ShortDetails Resource Type  Identifiers
#   <chr>   <chr>  <chr>        <chr>    <chr>        <chr>    <chr> <chr>
# 1 Myoedi… /pubm… Zhang Y, Lo… Physiol… Physiol Rev… PubMed   cita… PMID:29717…
# 2 Cullin… /pubm… Papizan JB,… J Biol … J Biol Chem… PubMed   cita… PMID:29653…
# 3 Fusoge… /pubm… Bi P, McAna… Proc Na… Proc Natl A… PubMed   cita… PMID:29581…
# 4 Correc… /pubm… Long C, Li … Sci Adv… Sci Adv.  2… PubMed   cita… PMID:29404…
# 5 Single… /pubm… Amoasii L, … Sci Tra… Sci Transl … PubMed   cita… PMID:29187…
# 6 Requir… /pubm… Shi J, Bi P… Proc Na… Proc Natl A… PubMed   cita… PMID:29078…
# 7 Consid… /pubm… Carroll KJ,… Circ Re… Circ Res.  … PubMed   cita… PMID:29074…
# 8 ZNF281… /pubm… Zhou H, Mor… Genes D… Genes Dev. … PubMed   cita… PMID:28982…
# 9 Functi… /pubm… Kyrychenko … JCI Ins… JCI Insight… PubMed   cita… PMID:28931…
#10 Defici… /pubm… Papizan JB,… J Clin … J Clin Inve… PubMed   cita… PMID:28872…
## ... with 365 more rows, and 3 more variables: Db <chr>, EntrezUID <int>,
##   Properties <chr>

这会产生一堆警告,其源于缺少/额外的逗号(,),但在这种情况下您可以忽略它们。请注意,列名已正确分配。


tidyverse::read_csv 工作得非常完美。谢谢!不幸的是,我没有足够的信用来为您的答案点赞。 - Josh
@Josh 很好,很高兴它起作用了。您可以通过在答案旁边设置绿色复选标记来关闭问题。祝您工作顺利! - Maurits Evers
谢谢,我无法弄清如何将问题标记为已回答。 - Josh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接