【发布时间】:2020-04-21 17:18:21
【问题描述】:
我有一个关于从具有这些行的多个文件中提取部分字符串的问题:
单位 = 指定 - 名称 0 = prDM:压力,Digiquartz [db] - 名称 1 = t090C:温度 [ITS-90,摄氏度] - 名称 2 = c0S/m:电导率 [S/m] - 名称 3 = t190C:温度,2 [ITS-90,摄氏度] - 名称 4 = c1S/m:电导率,2 [S/m] - 名称 5 = flSP:荧光,Seapoint - 名称 6 = sbeox0ML/L:氧气,SBE 43 [ml/l] - 名称 7 = altM:高度计 [m] - 名称 8 = sal00:盐度,实用 [PSU] - 名称 9 = sal11:盐度,实用,2 [PSU] - 跨度 0 = 1.000, 42.000
我只需要提取以“name”开头的列的信息,并提取 = 和: 之间的所有内容。 例如,在“名称 0 = prDM:压力,Digiquartz [db]”行中,所需的结果将是 prDM。 某些文件具有不同数量的“名称”行(即,此示例有 13 行,但其他文件有 16 行,并且数量会有所不同),所以我希望它尽可能通用,以便我总是可以独立提取正确的字符串行数。行以 # 开头,名称前有一个空格。 我试过这段代码,但它只提取第一行。你能帮我解决这个问题吗?非常感谢!
CNV<-NULL
for (i in 1:nro.files){
x <- readLines(all.files[i])
name.col<-grep("^\\# name", x)
df <- data.table::fread(text = x[name.col])
CNV[[i]]<-df
}
【问题讨论】:
-
我得到了这个错误:'\s' is an unrecognized escape in string started "" name[^=]+=\s"
-
改用
\\s。 -
我做了但仍然只提取第一行...
-
从
str_match_all提取所有匹配项后,您需要再创建一个for loop,如果您将从表中读取数据data.table::fread(text = x[result[[1]][[i,2]]])demo