R:读取csv,查找第一行匹配模式

R:读取csv,查找第一行匹配模式,r,csv,R,Csv,因此,我正在使用一些软件将数据输出为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 如果我需要读取

因此,我正在使用一些软件将数据输出为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中的观察值数量可变。如果我能找出与字符串
“#参数2”
匹配的行号,我就可以解决这个问题。我该怎么做呢?

您可以使用
阅读行

# 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]
#假设
#param2的开头是以下行

param2.indi您可以使用
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]
#假设
#param2的开头是以下行

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

示例:我一直在读行,直到找到匹配的行。在本例中,我的文件有一个需要跳过的长多行标题,后面是一个普通的电子表格样式的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])

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

示例:我一直在读行,直到找到匹配的行。在本例中,我的文件有一个需要跳过的长多行标题,后面是一个普通的电子表格样式的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])

您粘贴的是文件的文字内容吗?如果没有,那会有帮助的不,如果不清楚的话,很抱歉。但是使用这些简化的数据提问更容易,如果我知道如何找到与字符串匹配的行号,那么扩展就足够容易了。使用
grep
匹配字符串。粘贴的是文件的文字内容吗?如果没有,那会有帮助的不,如果不清楚的话,很抱歉。但是使用这个简化的数据提问更容易,如果我知道如何找到与字符串匹配的行号,那么扩展就足够容易了。使用
grep
匹配字符串。很好!有没有办法强迫grep只返回完美匹配?例如,如果我有另一行“#Parameter 2 Meta”,我不希望它也匹配?我尝试设置fixed=TRUE,但它似乎没有达到我的预期。是的,使用锚
grep(paste0(“^”,PATTERN,“$”,string)
-看看www.regular-expressions.info/reference.html这是一个很好的答案,让我想到了其他解决方案。hoever,如果您的示例代码是可执行的,那就太好了
param2.indi
p2.start
在编写时不是好的python变量。我会使用
parameter_2=“#parameter 2”
p2_start=grep(parameter_2,line)
。很好!有没有办法强迫grep只返回完美匹配?例如,如果我有另一行“#Parameter 2 Meta”,我不希望它也匹配?我尝试设置fixed=TRUE,但它似乎没有达到我的预期。是的,使用锚
grep(paste0(“^”,PATTERN,“$”,string)
-看看www.regular-expressions.info/reference.html这是一个很好的答案,让我想到了其他解决方案。hoever,如果您的示例代码是可执行的,那就太好了
param2.indi
p2.start
在编写时不是好的python变量。我将使用
parameter_2=“#parameter 2”
p2_start=grep(parameter_2,line)