如何将数据拆分至最多文件?字符串指定字符前后截取实现
处理字符串提取S前后字符并拆分文件的R方案
提取并格式化输出每个S的前后字符
以下是直接可用的R代码,能准确保留你需要的对齐格式:
# 定义原始字符串 df <- "PFSSQQRPHRHSMYVTRDKVRAKGLDGSLSIGQGMAARANSLQLLSPQPGEQLPPEMTVA" # 定位所有字符S的位置 s_indices <- gregexpr("S", df)[[1]] # 打印表头 cat(sprintf("%-18s %s\n", "5 count before S", "5 counts after S")) # 遍历每个S的位置,截取并输出前后字符 output_lines <- lapply(s_indices, function(pos) { # 截取前5个字符(处理开头不足5位的情况) pre_str <- substr(df, max(1, pos - 5), pos - 1) # 截取后5个字符(处理末尾不足5位的情况) post_str <- substr(df, pos + 1, min(nchar(df), pos + 5)) # 格式化对齐输出 line <- sprintf("%-18s %s", pre_str, post_str) cat(line, "\n") return(line) }) # 转换为向量方便后续拆分 output_vec <- unlist(output_lines)
运行后会输出符合要求的格式:
5 count before S 5 counts after S PF SQQRP PFS QRPHR RPHRH MYVTR KGLDG LSIGQ LDGSL IGQGM AARAN LQLLS SLQLL PQPGE
拆分结果至尽可能多的文件
要实现拆分到最多文件,我们给每个结果行单独生成一个文件:
# 循环生成单个文件 for (idx in seq_along(output_vec)) { # 自定义文件名,用序号区分 file_name <- sprintf("s_segment_%d.txt", idx) # 写入表头和对应行内容 writeLines(c("5 count before S 5 counts after S", output_vec[idx]), con = file_name) }
这段代码会生成7个独立文件(原字符串含7个S),每个文件对应一行结果。如果不需要每个文件都带表头,去掉c("5 count before S...", output_vec[idx])里的表头部分即可。
内容的提问来源于stack exchange,提问作者nik
相关产品推荐
相关产品推荐

