哪些文件在R中有一些内容

哪些文件在R中有一些内容,r,grepl,R,Grepl,我有一个包含文件行的列表,示例如下所示 list(c("\"ID\",\"SIGNALINTENSITY\",\"SNR\"", "\"NM_012429\",\"7.19739265676517\",\"0.738130599770152\"", "\"NM_003980\",\"12.4036181424743\",\"13.753593768862\"", "\"AY044449\",\"8.74973537284918\",\"1.77200602833912\"", "\"NM_0

我有一个包含文件行的列表,示例如下所示

list(c("\"ID\",\"SIGNALINTENSITY\",\"SNR\"", "\"NM_012429\",\"7.19739265676517\",\"0.738130599770152\"", 
"\"NM_003980\",\"12.4036181424743\",\"13.753593768862\"", "\"AY044449\",\"8.74973537284918\",\"1.77200602833912\"", 
"\"NM_005015\",\"11.3735054810744\",\"6.76079815107347\""), c("\"ID\",\"SIGNALINTENSITY\",\"SNR\"", 
"\"NM_012429\",\"7.07699512126353\",\"0.987579612646805\"", "\"NM_003980\",\"11.3172936656653\",\"8.38227473088534\"", 
"\"AY044449\",\"9.2865464417786\",\"2.61149606120517\"", "\"NM_005015\",\"10.1228142794354\",\"3.98707517627092\""
), c("ID,SIGNALINTENSITY,SNR", "1,NM_012429,6.44764696592035,0.84120306786724", 
"2,NM_003980,9.52604513443066,3.02404186191898", "3,AY044449,9.11930818670925,2.24361163736047", 
"4,NM_005015,10.5672879852575,5.29334273442728"))
我想在看台词时确认匹配。我试图通过以下代码找出哪些文件的内容以
NM
GE
开头

which(lapply(lines, function(x) any(grepl(paste(c("^NM_","^GE"),collapse = "|"), x, ignore.case = TRUE))) == T)
它应该给出所有三个的索引,但它返回
整数(0)
。我不确定我错过了什么。

试试这个:

lyst <- list(c("\"ID\",\"SIGNALINTENSITY\",\"SNR\"", "\"NM_012429\",\"7.19739265676517\",\"0.738130599770152\"", 
"\"NM_003980\",\"12.4036181424743\",\"13.753593768862\"", "\"AY044449\",\"8.74973537284918\",\"1.77200602833912\"", 
"\"NM_005015\",\"11.3735054810744\",\"6.76079815107347\""), c("\"ID\",\"SIGNALINTENSITY\",\"SNR\"", 
"\"NM_012429\",\"7.07699512126353\",\"0.987579612646805\"", "\"NM_003980\",\"11.3172936656653\",\"8.38227473088534\"", 
"\"AY044449\",\"9.2865464417786\",\"2.61149606120517\"", "\"NM_005015\",\"10.1228142794354\",\"3.98707517627092\""
), c("ID,SIGNALINTENSITY,SNR", "1,NM_012429,6.44764696592035,0.84120306786724", 
"2,NM_003980,9.52604513443066,3.02404186191898", "3,AY044449,9.11930818670925,2.24361163736047", 
"4,NM_005015,10.5672879852575,5.29334273442728"))
逻辑

首先使用
gsub
将''替换为nothing,然后使用'^'确定字符串的开头是NM还是GE,使用grepl

但是,如果有人对匹配可选数字和逗号感兴趣 也可以使用此正则表达式:

lapply(1:3, function(x)grepl("^(NM|GE)|^\\d+,(NM|GE)",gsub('"',"", lyst[[x]])))
输出:

    > lapply(1:3, function(x)grepl("^(NM|GE)|^\\d+,(NM|GE)",gsub('"',"", lyst[[x]])))
[[1]]
[1] FALSE  TRUE  TRUE FALSE  TRUE

[[2]]
[1] FALSE  TRUE  TRUE FALSE  TRUE

[[3]]
[1] FALSE  TRUE  TRUE FALSE  TRUE
或者,如果只需要索引:

lapply(
  dat,
  function(df) grepl("^NM_|^GE", df$ID, ignore.case = TRUE)
)

# [[1]]
# [1]  TRUE  TRUE FALSE  TRUE
# 
# [[2]]
# [1]  TRUE  TRUE FALSE  TRUE
# 
# [[3]]
# [1]  TRUE  TRUE FALSE  TRUE
或者用
grep
代替
grepl

lapply(
  dat,
  function(df) grep("^NM_|^GE", df$ID, ignore.case = TRUE)
)

# [[1]]
# [1] 1 2 4
# 
# [[2]]
# [1] 1 2 4
# 
# [[3]]
# [1] 1 2 4

谢谢你的回答,但是我不想把数据读成
.csv
@waitiedone,然后把
grepl(“^NM|GE”,df$ID,ignore.case=TRUE)
放在
any()
中,当我使用
readLines()时,没有什么比
df$ID
更好的了
,如上面的示例所示。
在我的回答中与您的问题中相同,
readLines()
lapply(dat,函数(df)any(grepl(^NM| ^ GE),df$ID,ignore.case=TRUE))的输出
谢谢,但您的答案不正确,如果您可以看到第三个列表中也有以
NM
开头的字符串。@等待一个否根据您的问题,它们以数字开头,而不是以NM或GE开头,您可以看到它以1、2或3开头,类似于此。如果您正确更改字符串,您将使用同样的code@AwaitedOne,我对我的解决方案进行了编辑,使其符合您的两种需要,这是有意义的。
lapply(
  dat,
  function(df) df[grepl("^NM_|^GE", df$ID, ignore.case = TRUE), ]
)

# [[1]]
#          ID SIGNALINTENSITY        SNR
# 1 NM_012429        7.197393  0.7381306
# 2 NM_003980       12.403618 13.7535938
# 4 NM_005015       11.373505  6.7607982
# 
# [[2]]
#          ID SIGNALINTENSITY       SNR
# 1 NM_012429        7.076995 0.9875796
# 2 NM_003980       11.317294 8.3822747
# 4 NM_005015       10.122814 3.9870752
# 
# [[3]]
#          ID SIGNALINTENSITY       SNR
# 1 NM_012429        6.447647 0.8412031
# 2 NM_003980        9.526045 3.0240419
# 4 NM_005015       10.567288 5.2933427
lapply(
  dat,
  function(df) grepl("^NM_|^GE", df$ID, ignore.case = TRUE)
)

# [[1]]
# [1]  TRUE  TRUE FALSE  TRUE
# 
# [[2]]
# [1]  TRUE  TRUE FALSE  TRUE
# 
# [[3]]
# [1]  TRUE  TRUE FALSE  TRUE
lapply(
  dat,
  function(df) grep("^NM_|^GE", df$ID, ignore.case = TRUE)
)

# [[1]]
# [1] 1 2 4
# 
# [[2]]
# [1] 1 2 4
# 
# [[3]]
# [1] 1 2 4