如何用R的split()函数按分组因子拆分数据?含FASTA序列场景
R中split()函数的分组参数设置及FASTA序列按物种拆分示例
基础场景:向量x的分组拆分
已知R语言向量x的内容如下:
> x [1] "A" "A" "A" "B" "B" "C"
要通过split()将其拆分为A、B、C三个组,直接把向量x本身作为分组因子参数f传入就行,代码如下:
split(x, f = x)
运行后输出结果符合预期:
$A [1] "A" "A" "A" $B [1] "B" "B" $C [1] "C"
split()会自动识别f里的唯一值作为分组依据,这里x的元素就是现成的分组标识,直接用它当f参数完全满足需求。
实际场景:FASTA序列按物种拆分
需求说明
处理FASTA序列时,多个序列对应同一物种,需要按物种拆分序列。FASTA头信息示例如下:
">COLFG678-14|MZ630002|Agabus|adpressus|AEC6988|COI-5P"
其中物种为Agabus adpressus,期望输出格式为:
$`Agabus adpressus` [1] "Seq1" "Seq2" "Seq3"
实现步骤
- 提取物种名:先从FASTA头信息里提取完整物种名(头信息按
|分割后,第3和第4字段拼接)。假设所有FASTA头存在向量headers中,代码如下:
# 分割每个头信息为字段 header_fields <- strsplit(headers, "\\|") # 拼接第3、4字段得到物种名 species_names <- sapply(header_fields, function(x) paste(x[3], x[4], sep = " "))
- 按物种拆分序列:假设所有序列存在向量
seqs中,用split()函数把species_names作为分组因子f传入即可:
split_seqs <- split(seqs, f = species_names)
执行后就能得到以物种名为列表名、对应物种所有序列为元素的分组结果。
内容的提问来源于stack exchange,提问作者compbiostats
相关产品推荐
相关产品推荐

