如何将最后一个空列的 CSV 导入 R?

How to import a CSV with a last empty column into R?

我写了一个 R 脚本来对 Journal Citation Report 数据 (JCR) 进行一些科学计量分析,我在过去几年一直在使用和更新它。

今天,Clarivate 刚刚在其数据库中引入了一些更改,现在导出的 CSV 文件包含最后一个空列,这破坏了我的脚本。由于最后一个空列,read.csv 自动假定第一列包含行名称。

和以前一样,还有一个第一个无用的行,它在我的脚本中用 skip = 1 自动删除了。

这种“空列情况”的一个简单解决方案是手动删除 Excel 中的最后一列,然后像往常一样继续我的脚本。

但是,有没有办法使用 base R 将此删除添加到我的脚本中?

我的脚本开头是:

    jcreco = read.csv("data/jcr ecology 2020.csv",
    na = "n/a", skip = 1, header = T)

从 JCR 下载的原始 CSV 文件在我的 Dropbox 中可用。

你能帮帮我吗?谢谢!

这是一个方法。

  1. 以文本行形式读取数据;
  2. 舍弃第一行;
  3. 去掉结尾的逗号 sub;
  4. 创建文本连接;
  5. 并从连接中读入数据。

变量 fl 保存文件,在我的磁盘上我必须设置目录。

fl <- "jcr_ecology_2020.csv"
txt <- readLines(fl)
txt <- txt[-1]
txt <- sub(",$", "", txt)
con <- textConnection(txt)
df1 <- read.csv(con)
close(con)
head(df1)

真正的问题是空列没有 header。如果他们只在 header 行的末尾多了一个逗号,这可能不会那么混乱。但是您也可以使用 fill=TRUE 进行一些列改组。例如

dd <- read.table("~/../Downloads/jcr ecology 2020.csv", sep=",", 
   skip=2, fill=T, header=T, row.names=NULL)
names(dd)[-ncol(dd)] <- names(dd)[-1]
dd <- dd[,-ncol(dd)] 

这会读入数据,但会将行名称放入 data.frame 并用 NA 填充最后一列。然后将所有列名称移到左侧并删除最后一列。