写一个for循环自动r中创建的数据集的子集

问题描述:

请帮助我,因为我是新来的R和也编程写一个for循环自动r中创建的数据集的子集

我试图写这样一个循环,应改为每1000行数据和r中

继创建数据集是我的试验

for(i in 0:nl){ 
    df[i] = fread('RM.csv',skip = 1000*i, nrows =1000, 
       col.names = colnames(read.csv('RM.csv', nrow=1, header = T))) 
} 

其中nl是一个整数,并等于数据的长度'RM.csv'

我试图做的是创建一个函数,该函数将跳过每1000行并读取下一1000行,并在达到原始数据长度nl后终止。

现在并不强制只使用这种方法。

+0

[在片读取CSV文件策略?]的可能的复制(https://stackoverflow.com/questions/9352887/strategies-for-reading-in-csv-files-in-pieces) –

你可以尝试读取整个文件到一个单一的数据帧,然后关闭子集化的行你不想:

df <- read.csv('RM.csv', header=TRUE) 
y <- seq(from = 0, to = 100000, by = 1)  # replace the 'to' value with a value 
seq.keep <- y[floor(y/1000) %% 2 == 0] # large enough for the whole file 
df.keep <- df[seq.keep, ] 

这是一个相当混乱的演示这表明上述顺序逻辑是正确的:

Demo

您可以检查所产生的顺序是:

0-999 
2000-2999 
4000-4999 
etc. 

如代码注释中所述,确保生成足够大的序列以适应数据帧的实际大小。

如果您需要继续使用目前的方法,那么请尝试每隔1000行读取一次,例如,

sq <- seq(from=0, to=nl, by=2) 
names <- colnames(read.csv('RM.csv', nrow=1, header=TRUE)) 
for(i in sq) { 
    df_i <- fread('RM.csv', skip=1000*i, nrows=1000, col.names=names) 
    # process this chunk and move on 
} 
+0

文件的大小是20 GB。因此,如果我试图一次读取整个数据,系统就会崩溃。因此,我想读取大量的数据并在晚些时候执行匹配功能。一旦完成所有事情,它会写入数据并开始读取下一个块,等等。 – user3301082

+0

@ user3301082我更新了我的答案。只要继续使用当前的方法,但是使用一个以你想读取的行为目标的序列来读取文件。 –

+0

已更新的代码正在抛出错误:找不到对象'df'。但是当我将df [i]更改为df_i时,循环以无限循环结束。 – user3301082