【发布时间】:2014-04-11 05:58:46
【问题描述】:
要处理的 csv 文件不适合内存。如何读取大约 20K 的随机行来对所选数据帧进行基本统计?
【问题讨论】:
标签: r csv random dataframe bigdata
要处理的 csv 文件不适合内存。如何读取大约 20K 的随机行来对所选数据帧进行基本统计?
【问题讨论】:
标签: r csv random dataframe bigdata
根据sqldf github home page 上的示例 6e 和 6f 试试这个:
library(sqldf)
DF <- read.csv.sql("x.csv", sql = "select * from file order by random() limit 20000")
请参阅?read.csv.sql,根据您的文件的具体情况,根据需要使用其他参数。
【讨论】:
如果您的数据中有 ID 或类似内容,则可以使用以下内容。 获取 ID 样本,然后使用采样的 ID 获取数据子集。
sampleids <- sample(data$id,1000)
newdata <- subset(data, data$id %in% sampleids)
【讨论】:
你也可以在终端中使用 perl 来完成。
perl -ne 'print if (rand() < .01)' biglist.txt > subset.txt
这不一定会得到 20,000 行。 (这里它会占用大约 0.01 或 1% 的总行数。)然而,它会非常快,并且您将在目录中拥有这两个文件的一个很好的副本。然后,您可以根据需要将较小的文件加载到 R 中。
【讨论】:
head -1 file.txt > sample.txt)然后用>> 运行perl 操作而不是追加
' 更改为 "
这应该可行:
RowsInCSV = 10000000 #Or however many rows there are
List <- lapply(1:20000, function(x) read.csv("YourFile.csv", nrows=1, skip = sample(1, RowsInCSV), header=F)
DF = do.call(rbind, List)
【讨论】: