如何有效地对向量中每个字符串的字符进行排序?例如,给定一个字符串向量:
set.seed(1)
strings <- c(do.call(paste0, replicate(4, sample(LETTERS, 10000, TRUE), FALSE)),
do.call(paste0, replicate(3, sample(LETTERS, 10000, TRUE), FALSE)),
do.call(paste0, replicate(2, sample(LETTERS, 10000, TRUE), FALSE)))
Run Code Online (Sandbox Code Playgroud)
我编写了一个函数,该函数将每个字符串分成一个向量,对向量进行排序,然后折叠输出:
sort_cat <- function(strings){
tmp <- strsplit(strings, split="")
tmp <- lapply(tmp, sort)
tmp <- lapply(tmp, paste0, collapse = "")
tmp <- unlist(tmp)
return(tmp)
}
sorted_strings <- sort_cat(strings)
Run Code Online (Sandbox Code Playgroud)
但是,我需要将其应用到的字符串向量很长,并且此功能太慢。有没有人对如何提高性能有任何建议?
我有两个非常大的向量,需要将它们与定界符连接起来以形成唯一的ID。例如:
set.seed(1)
vec1 <- sample(1:10, 10000000, replace = T)
vec2 <- sample(1:1000000000, 10000000))
Run Code Online (Sandbox Code Playgroud)
我目前正在使用paste0():
system.time({
uniq_id <- paste0(vec1, "_", vec2)
})
Run Code Online (Sandbox Code Playgroud)
但是,由于vec1和vec2的大小,这非常慢。是否有性能更高的替代方法?
我有一个数据表,该数据表定义了一组序列的开始和结束坐标。例如:
df1 <- data.frame(from = c(7, 22, 35, 21, 50),
to = c(13, 29, 43, 31, 60))
Run Code Online (Sandbox Code Playgroud)
给定开始和结束坐标(即1和100),我试图使用相同的输出格式来识别序列未涵盖的所有整数。例如:
df2 <- data.frame(from = c(1, 14, 32, 44, 61),
to = c(6, 20, 34, 49, 100))
Run Code Online (Sandbox Code Playgroud)
这是我目前的尝试,其中我对df1中的序列进行矢量化处理,然后识别出与序列1:100不匹配的所有整数。
seq2 <- Vectorize(seq.default, vectorize.args = c("from", "to"))
seq <- c(1:100)
df1_int <- unlist(seq2(from = df1$from, to = df1$to))
df1_int <- unique(df1_int)
df2_int <- seq[!seq %in% df1_int]
all(diff(df2_int) == 1)
Run Code Online (Sandbox Code Playgroud)
但是,这种方法对于我想将其应用于(〜100,000,000个整数)的数据集来说太慢了,而且我不知道如何将向量df2_int重新格式化为df2格式的数据帧。
任何帮助将不胜感激!
注意:df1中的序列并不总是以最低整数开头(例如,序列可以从13到7,而不是从7到13)。也可能只有一个整数(例如7到7)的序列。
鉴于字符串:
string <- "AATTGGCGCTAG---AT-TTACG----"
Run Code Online (Sandbox Code Playgroud)
如何根据一个或多个“-”的出现将其拆分为字符串。例如:
string1 <- "AATTGGCGCTAG"
string2 <- "---"
string3 <- "AT"
string4 <- "-"
string5 <- "TTACG"
string6 <- "----"
Run Code Online (Sandbox Code Playgroud)
我试过了:
strsplit(string, "[-]+")
Run Code Online (Sandbox Code Playgroud)
但是,这不会返回“-”的刺痛
我有一个单字符串的向量:
seq <- c("c","t","c","t","c","c","t","a","t", "g", "g", "c", "g", "g", "g", "a", "a", "g", "c", "-", "-", "a", "a","-", "-", "-", "c", "t", "g")
Run Code Online (Sandbox Code Playgroud)
我想创建一个相等长度的向量,从起始整数计算字符串,但忽略" - ".
例如,如果起始整数是1000
输出字符串将是:
out <-c(1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, NA, NA, 1019, 1020, NA, NA, NA, 1021, 1022, 1023)
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感谢!
我有一个向量字符串,例如:
x <- c("gene_biotype \"protein_coding\"; transcript_name \"IGHV3-66-201\";
transcript_source \"havana\"; transcript_biotype \"IG_V_gene\";
protein_id \"ENSP00000375041\"; protein_version \"2\"; tag
\"cds_end_NF\"; tag \"mRNA_end_NF\"; tag \"basic\";
transcript_support_level \"NA\";",
"gene_id \"ENSG00000211973\"; gene_version \"2\"; transcript_id
\"ENST00000390633\"; transcript_version \"2\"; exon_number \"1\";
gene_name \"IGHV1-69\"; gene_source \"ensembl_havana\"; gene_biotype
\"IG_V_gene\"; transcript_name \"IGHV1-69-201\"; transcript_source
\"ensembl_havana\"; transcript_biotype \"IG_V_gene\"; protein_id
\"ENSP00000375042\"; protein_version \"2\"; tag \"cds_end_NF\"; tag
\"mRNA_end_NF\"; tag \"basic\"; transcript_support_level \"NA\";",
"gene_id \"ENSG00000211973\"; gene_version \"2\"; transcript_id
\"ENST00000390633\"; transcript_version \"2\"; exon_number \"2\";
gene_name \"IGHV1-69\"; gene_source \"ensembl_havana\"; gene_biotype
\"protein_coding\";")
Run Code Online (Sandbox Code Playgroud)
我需要提取遵循gene_biotype的引用文本(任何字符)。例如:
[1] protein_coding\
[2] IG_V_gene\
[3] protein_coding\ …Run Code Online (Sandbox Code Playgroud) r ×6
string ×3
performance ×2
regex ×2
count ×1
large-data ×1
paste ×1
sequence ×1
sorting ×1
vector ×1