写一个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后终止。
现在并不强制只使用这种方法。
你可以尝试读取整个文件到一个单一的数据帧,然后关闭子集化的行你不想:
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
}
文件的大小是20 GB。因此,如果我试图一次读取整个数据,系统就会崩溃。因此,我想读取大量的数据并在晚些时候执行匹配功能。一旦完成所有事情,它会写入数据并开始读取下一个块,等等。 – user3301082
@ user3301082我更新了我的答案。只要继续使用当前的方法,但是使用一个以你想读取的行为目标的序列来读取文件。 –
已更新的代码正在抛出错误:找不到对象'df'。但是当我将df [i]更改为df_i时,循环以无限循环结束。 – user3301082
[在片读取CSV文件策略?]的可能的复制(https://stackoverflow.com/questions/9352887/strategies-for-reading-in-csv-files-in-pieces) –