String R提取R中字符串的一部分
我有500万个序列(探针是特定的),如下所示。我需要从每个字符串中提取名称 这里的名字是1007_s_at:123:381、10073_s_at:128:385等等 我正在使用lappy函数,但它占用了太多的时间。我还有其他几个类似的文件。你能建议一种更快的方法吗String R提取R中字符串的一部分,string,r,lapply,String,R,Lapply,我有500万个序列(探针是特定的),如下所示。我需要从每个字符串中提取名称 这里的名字是1007_s_at:123:381、10073_s_at:128:385等等 我正在使用lappy函数,但它占用了太多的时间。我还有其他几个类似的文件。你能建议一种更快的方法吗 nm = c( "probe:HG-Focus:1007_s_at:123:381; Interrogation_Position=3570; Antisense;", "probe:HG-Focus:1007_s_at:1
nm = c(
"probe:HG-Focus:1007_s_at:123:381; Interrogation_Position=3570; Antisense;",
"probe:HG-Focus:1007_s_at:128:385; Interrogation_Position=3615; Antisense;",
"probe:HG-Focus:1007_s_at:133:441; Interrogation_Position=3786; Antisense;",
"probe:HG-Focus:1007_s_at:142:13; Interrogation_Position=3878; Antisense;" ,
"probe:HG-Focus:1007_s_at:156:191; Interrogation_Position=3443; Antisense;",
"probe:HTABC:1007_s_at:244:391; Interrogation_Position=3793; Antisense;")
extractProbe <- function(x) sub("probe:", "", strsplit(x, ";", fixed=TRUE)[[1]][1], ignore.case=TRUE)
pr = lapply(nm, extractProbe)
使用正则表达式:
sub("probe:(.*?):(.*?);.*$", "\\2", nm, perl = TRUE)
一点解释:
表示“任何字符”*
表示“任意数量的字符”*?
表示“任意数量的字符,但不要贪心\\1
、\\2
等$
表示行尾(或字符串)(.*?
)捕获两个内容:您不想要的HG Focus
(或其他)内容为\\1
,您的id为\\2
。通过将替换设置为\\2
,我们有效地将整个字符串替换为您的id
我现在意识到没有必要捕捉第一件事,所以这同样有效:
sub("probe:.*?:(.*?);.*$", "\\1", nm, perl = TRUE)
使用正则表达式:
sub("probe:(.*?):(.*?);.*$", "\\2", nm, perl = TRUE)
一点解释:
表示“任何字符”*
表示“任意数量的字符”*?
表示“任意数量的字符,但不要贪心\\1
、\\2
等$
表示行尾(或字符串)(.*?
)捕获两个内容:您不想要的HG Focus
(或其他)内容为\\1
,您的id为\\2
。通过将替换设置为\\2
,我们可以有效地用您的id替换整个字符串
我现在意识到没有必要捕捉第一件事,所以这同样有效:
sub("probe:.*?:(.*?);.*$", "\\1", nm, perl = TRUE)
迂回技术:
sapply(strsplit(sapply(strsplit(nm, "e:"), "[[", 2), ";"), "[[", 1)
迂回技术:
sapply(strsplit(sapply(strsplit(nm, "e:"), "[[", 2), ";"), "[[", 1)
伙计,把它存到一个文本文件里,然后运行grep之类的程序。您使用了一个错误的工具。1)请为我们提供一些可以轻松放入R会话中的代码,使您的示例具有可复制性;2)在linux/unix上尝试
mclappy()
,或在Windows上尝试parlappy
,以并行运行。你可能也可以让你的函数更快,但我不会把你的数据放到我的R会话中去找出答案。你能澄清一下“HG Focus:”是否应该是输出的一部分吗?HG Focus不应该出现在输出中。伙计,把它保存到一个文本文件中,然后运行grep或类似的东西。您使用了一个错误的工具。1)请为我们提供一些可以轻松放入R会话中的代码,使您的示例具有可复制性;2)在linux/unix上尝试mclappy()
,或在Windows上尝试parlappy
,以并行运行。您可能也可以使您的功能更快,但我不会通过将您的数据输入我的R会话来了解。您能否澄清“HG Focus:”是否应该是输出的一部分?HG Focus不应该出现在输出中。我很抱歉没有这么具体。HG-FOCUS在其他文件中可能是不同的字符串。但是请你解释一下(特别是“\\2”)我很抱歉没有说得那么具体。HG-FOCUS在其他文件中可能是不同的字符串。但是你能解释一下吗(特别是“\\2”)