读取超大文件 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 中提到的 vroom
或 data.table
包。我只会读取第一行来解析列名,然后读取选定的列。
【参考方案1】:
这是一种方法。
1。列名
使用reaLines
读取列名,设置n = 1
,以便仅读取列标题行。然后scan
和sep = ","
会将行拆分为列名。
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 的列名和列值的主要内容,如果未能解决你的问题,请参考以下文章
Informix JDBC PySpark 将列名中的结果作为列值读取