1

因此,我正在使用一些将数据输出为具有以下格式的 csv 文件的软件:

# Parameter 1
ID,Col1,Col2,Col3
1,a,b,c
2,d,e,f
3,g,h,i
[...]
j,x,y,z

# Parameter 2
ID,Col1,Col2,Col3
1,a,b,c
2,d,e,f
3,g,h,i
[...]
k,x,y,z

# Parameter 3
ID,Col1,Col2,Col3
1,a,b,c
2,d,e,f
3,g,h,i
[...]
n,x,y,z

如果我需要读取参数 1 的第 10 行,我会使用read.csv('file.csv', header=FALSE, skip=10, nrows=1),这会给我想要的。但是,如果我想阅读参数 2 的第 10 个观察值,我不知道要分配哪个整数跳过,因为参数 1 中的观察值数量可变。如果我能弄清楚这条线,我可以解决这个问题与字符串匹配的数字"# Parameter 2"。我该怎么做?

4

2 回答 2

4

您可以使用readLines

# Assuming that what indicates the
#  start of param2 is the follwing line
param2.indic <- "# Parameter 2"


# read in the raw file
lines <- readLines("path\to\file.csv")

# find the start of parameter 2
p2.start <- grep(param2.indic, lines)

# go down n+2 lines from p2.start
n <- 10  # which line to find
lines[p2.start + n + 2]
于 2013-09-25T19:29:00.450 回答
0

您可以阅读这些行,直到找到匹配的行,然后从那里开始。

示例:我阅读行,直到找到匹配项。在这种情况下,我的文件有一个长的多行标题,我需要跳过它,然后是一个普通的电子表格样式的 csv。我正在寻找标题行,我知道它以“Sample_ID”作为第一个元素开始。

csvreader = csv.reader(csvfile, delimiter=',', quotechar='"')
for row in csvreader:
    if row[0].strip() == 'Sample_ID':
        header = row
        break

现在我已经将行排到标题行,我可以根据需要处理文件的其余部分:

sample_ids = []
for row in csvreader:
    sample_ids.append(row[0])
于 2014-11-03T05:20:10.033 回答