r - 在导入 csv 列的子集时,R 中最有效的读取 csv 函数/包是什么
问题描述
我正在尝试将 csv 加载到 R 中,即 c。180k 行和 c.9k 列。我只需要 c.100 列的一个子集,并且知道我需要的列的名称。
这个问题的答案涵盖了在导入 csv 时选择列子集的许多不同选项。
使用这些答案和我自己的知识,我尝试使用utils中的read.csv和read.table,data.table中的fread和readr中的read_csv。所有这些函数似乎都导入了整个 csv,然后对列进行了子集化——在我只需要这么小的列子集的情况下,这是非常低效的。我还尝试使用sqldf中的read.csv.sql,这似乎很有希望,因为选择特定列是一项非常常见的 SQL 任务,但我无法导入列的子集,因为我收到了错误。Error: too many columns on file
来自社区的两项真正帮助我的贡献:
- 任何人都可以指出一个不同的导入函数,在我只需要一个列子集的情况下它会更有效率吗?
- 谁能提供有关这些功能如何工作的更多背景信息并纠正我的误解或向我保证我正在寻找的解决方案不存在?
非常感谢!
PS我之前没有问过很多关于SO的问题,所以如果我需要以不同的方式提问,我会很感激反馈。
解决方案
有许多命令行实用程序(例如 sed、awk、cut、csvfix、miller、csvkit、csvtk)可以做到这一点。下面我们使用xsv。这会在文件到达 R 之前删除不需要的列。如果 iot 不在 PATH 上,请使用 xsv 的完整路径。 xsv
接受如下所示的列名或字段编号。
# write out test data
write.csv(iris, "iris-test.csv", quote = FALSE, row.names = FALSE)
cmd <- "xsv select Sepal.Length,Petal.Length-Species iris-test.csv"
DF <- read.csv(pipe(cmd))
head(DF)
## Sepal.Length Petal.Length Petal.Width Species
## 1 5.1 1.4 0.2 setosa
## 2 4.9 1.4 0.2 setosa
## 3 4.7 1.3 0.2 setosa
## 4 4.6 1.5 0.2 setosa
## 5 5.0 1.4 0.2 setosa
## 6 5.4 1.7 0.4 setosa
或者使用 UNIX cut(也可以在 R 4.0+ 中的 \Rtools40\usr\bin 中的 Windows Rtools中使用)以下工作。如果cut
您cut
的PATH
.
cmd2 <- "cut -d, -f 1,3-5 iris-test.csv"
DF <- read.csv(pipe(cmd2))
推荐阅读
- html - 使用 Tailwind 悬停时的 SVG 颜色填充
- elixir - 如何正确设置凤凰城银行的存款功能
- python - 无法在 Google Colab 中读取 3GB 文件
- django - 在 DJANGO 的框中为同一子类别创建两个用户
- android - 如何根据 kotlin 列表上的字符串参数输入过滤整数值?
- reporting-services - SSRS 如何将数据集字段的某个值提供给自定义代码中的变量
- forms - 如何多次提交表单(asp.net core razor)
- flutter - 当我向上滚动时,SliverAppBar 中的 FlexibleSpace 没有隐藏它的内容
- python - 如何在 mysql python 连接器中为列名放置占位符?
- e-commerce - 如何将 GA4 电子商务数据层添加到 WooCommerce?