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

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

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

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

谢谢。

【问题讨论】:

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

标签: r dataframe csv large-data


【解决方案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 ...

【讨论】:

猜你喜欢
  • 2019-07-03
  • 2014-06-12
  • 1970-01-01
  • 2023-03-14
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
相关资源
最近更新 更多