我有以下数据框:
df <- data.frame(V1 = c(">A1_[Er]",
"aaaabbbcccc",
">B2_[Br]",
"ddddeeeeeff",
">C3_[Gh]",
"ggggggghhhhhiiiiijjjjjj"))
我想按照固定的字符数(这个问题的目的是两个)拆分字符串,并将它们放在新的行中。我还想排除包含以“〉”符号开头的字符串的行。结果 Dataframe 应该如下所示:
df1 <- data.frame(V1 = c(">A1_[Er]", "aa", "aa", "bb", "bc", "cc", "c",
">B2_[Br]", "dd", "dd", "ee", "ee", "ef", "f",
">C3_[Gh]", "gg", "gg", "gg", "gh", "hh", "hh", "ii", "ii", "ij", "jj", "jj", "jj"))
我试过在一个子集化的df上使用separate_longer_position()函数,如下所示:
separate_longer_position(subset(df, !df$V1 %like% ">"), V1, 2)
我的方法确实分割了所需的字符串,但也将包含以“〉”开头的字符串的行从结果 Dataframe 中删除。
顺便说一句,这确实是一个FASTA格式,但出于教育目的,我不想使用像Biostrings这样的专用软件包来解决这个问题。
请指示。
4条答案
按热度按时间byqmnocz1#
你可以试试
regmatches
并获得了
xvw2m8pv2#
虽然我可能会迟到,但这里有一个
tidyverse
解决方案可能值得考虑:qyyhg6bp3#
我们可以使用
tidyverse
作为7ajki6be4#
您可以使用
gregexp
和^>.*|.{1,2}
来匹配以>
开头或以长度2分割的任何内容,并使用regmatches
提取匹配项。或者使用
strsplit
和(?<=..)
将字符串拆分为 * 固定数量的字符 *,然后使用[<-
(或replace
)插入以>
开头的字符串。或者使用
lapply
。基准
结果
在这种情况下,使用
strsplit
是最快的,并且使用最少的内存量。