R语言 阅读csv文件时多次跳过

kgsdhlau  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(144)

我有一个非常大的文件,我只需要第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后继续跳过,而不是再次从文件的开头开始。那会保存一些时间。
如果可以避免的话,我不希望在内存中(在某个时候)将整个文件(或整个第一列)保存在内存中。

gcmastyq

gcmastyq1#

这里有一个scan的方法。它假定您正在阅读数值数据,如果不包含

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

相关问题