将大型csv文件中的小型随机样本加载到R数据帧中

时间:2014-03-07 21:32:48

标签: r csv random dataframe bigdata

要处理的csv文件不适合内存。如何读取它的~20K随机线来对所选数据帧进行基本统计?

4 个答案:

答案 0 :(得分:23)

您也可以使用perl在终端中执行此操作。

perl -ne 'print if (rand() < .01)' biglist.txt > subset.txt

这不一定能让你获得20,000行。 (这里它将占据总行数的0.01或1%。)但是,它真的非常快,你的目录中的两个文件都有一个很好的副本。然后,您可以根据需要将较小的文件加载到R中。

答案 1 :(得分:7)

根据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

答案 2 :(得分:4)

这应该有效:

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)

答案 3 :(得分:-3)

如果您的数据中包含ID或类似内容,则可以使用以下内容。 获取ID样本,然后使用采样的ID获取数据子集。

sampleids <- sample(data$id,1000)
newdata <- subset(data, data$id %in% sampleids)