要处理的csv文件不适合内存。如何读取它的~20K随机线来对所选数据帧进行基本统计?
答案 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)