读取超大文件 R 的列名和列值

Posted

技术标签:

【中文标题】读取超大文件 R 的列名和列值【英文标题】:Reading Column Names and Column Values for Extremely Large File R 【发布时间】:2021-12-15 10:09:21 【问题描述】:

我需要在 RStudio 3(在 Mac 上)中加载一个 ~11GB 的 CSV 文件;这使得无法使用常规命令加载。我需要基于某些列值的数据子集,这应该使其易于管理。我该怎么做:

    获取列名而不将整个文件作为数据框加载

    从此文件中读取单个列作为列表

谢谢。

【问题讨论】:

你知道数据有多少列吗?以及数据的类型,字符,数字,什么? 查看 read.csv.sql 包中的函数 sqldf 以仅读取一列。 查看我的回答 ***.com/a/48105838/786542 中提到的 vroomdata.table 包。我只会读取第一行来解析列名,然后读取选定的列。 【参考方案1】:

这是一种方法。

1。列名

使用reaLines 读取列名,设置n = 1,以便仅读取列标题行。然后scansep = "," 会将行拆分为列名。

library(sqldf)

col_names <- readLines(tmpfile, n = 1)
col_names
#[1] "mpg,cyl,disp,hp,drat,wt,qsec,vs,am,gear,carb"

tc <- textConnection(col_names)
col_names <- scan(tc, sep = ",", what = character())
close(tc)

2。数据

第 4 列是"hp。用read.csv.sql 只读那个。 SQL语句与sprintf放在一起。

col_names[4]
#[1] "hp"

SQL <- sprintf("select %s from file", col_names[4])
SQL
#[1] "select hp from file"

hp <- read.csv.sql(tmpfile, sql = SQL)
str(hp)
#'data.frame':  6718464 obs. of  1 variable:
#  $ hp: int  110 110 93 110 175 105 245 62 95 123 ...

【讨论】:

这也适用于***.com/questions/69663085/… 吗? @DonaldSeinen 不,sqldf 无法解析 XML。

以上是关于读取超大文件 R 的列名和列值的主要内容,如果未能解决你的问题,请参考以下文章

在 R [重复] 读取的数据文件中分配列名

Informix JDBC PySpark 将列名中的结果作为列值读取

如何用PHPExcel读取超大excel文件

04 pandas DataFrame_创建、文件读取、编码

macmatlab导入大型csv

如何在 Excel 中组合具有不同列名和列顺序的多个 CSV 文件?