如何将最后一个空列的 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 中可用。
你能帮帮我吗?谢谢!
这是一个方法。
- 以文本行形式读取数据;
- 舍弃第一行;
- 去掉结尾的逗号
sub
;
- 创建文本连接;
- 并从连接中读入数据。
变量 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 填充最后一列。然后将所有列名称移到左侧并删除最后一列。
我写了一个 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 中可用。
你能帮帮我吗?谢谢!
这是一个方法。
- 以文本行形式读取数据;
- 舍弃第一行;
- 去掉结尾的逗号
sub
; - 创建文本连接;
- 并从连接中读入数据。
变量 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 填充最后一列。然后将所有列名称移到左侧并删除最后一列。