r - 读取 csv 文件时多次跳过

标签 r read.csv

我有一个非常大的文件,我只需要第 1、100001、200001 行的第一个元素,我如下提取:

x1 <- read.csv(filename, nrows = 1, header = F)[1, 1]
x2 <- read.csv(filename, skip = 100000, nrows = 1, header = F)[1, 1]
x3 <- read.csv(filename, skip = 200000, nrows = 1, header = F)[1, 1]

我不知道阅读是如何进行的,但我认为这会迫使一些不必要的阅读/跳过。

我想知道我是否可以在阅读x2后继续跳过,而不是再次从文件的开头开始。这会节省一些时间。

如果可以避免的话,我不想将整个文件(或整个第一列)保留在内存中(在某些时候)。

最佳答案

这是一种扫描的方法。它假设您正在读取数字数据,如果不包括

what = character()

在对scan的调用中。测试文件在最后。
请注意,我跳过了 10 行,而不是 1000 行。

fl <- "~/Temp/so.csv"

sep = ","
skip <- 10L

vec <- NULL
skp <- 0L
x <- scan(fl, sep = sep, n = 1L, nlines = 1L)
while(length(x) > 0L) {
  vec <- c(vec, x)
  skp <- skp + skip
  x <- scan(fl, sep = sep, n = 1L, skip = skp, nlines = 1L)
}
vec
#> [1]  1 11 21 31

创建于 2023-06-08,使用 reprex v2.0.2


数据

这是测试文件的内容(40 行)。

1,a,21
2,b,22
3,c,23
4,a,24
5,b,25
6,c,26
7,a,27
8,b,28
9,c,29
10,a,30
11,b,31
12,c,32
13,a,33
14,b,34
15,c,35
16,a,36
17,b,37
18,c,38
19,a,39
20,b,40
21,c,41
22,a,42
23,b,43
24,c,44
25,a,45
26,b,46
27,c,47
28,a,48
29,b,49
30,c,50
31,a,51
32,b,52
33,c,53
34,a,54
35,b,55
36,c,56
37,a,57
38,b,58
39,c,59
40,a,60

关于r - 读取 csv 文件时多次跳过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76433056/

相关文章:

r - 尝试将 .csv 文件读入 R 时出现“不完整的最后一行”警告

read.csv 空白字段到 NA

r - 是否有任何正当理由不使用 fread() 和 fwrite() 而不是 read.csv() 和 write.csv()?

r - 在 read.csv 中指定 colClasses

r - 在 R 中提取字符串之前的数值

R计算一行而不是列的模式

r - 使用 R 查找最近的 X,Y 坐标

r - 如何仅打开一个文件的工作目录中的下一个文件夹?

r - 如果列中出现负值,如何复制该列?

r - 有没有一种简单的方法可以将预测恢复为时间序列以进行绘图?