R 中的不等数据帧比较 - ifelse 命令

问题描述 投票:0回答:0

我有两个数据集,看起来像这样:

  1. biological_data(包含DNA上的位置列表,也就是不同长度范围的列表):
类型 开始 结束 宽度
A 171 884 714
A 20639 21148 510
1287309 1287818 510

昏暗(生物数据) 126 4

  1. consensus_seq(包含已知序列的列表,每个序列的长度为 9):
ID 顺序 开始 结束
1 TTTTCACA 209 218
2 TTTTGCACA 500 508
3 TTTTACACA 5233 5242
4 TTTTCACA 1287900 1287909

昏暗(共识序列) 8394 4

我想验证 biological_data 中的位置是否包含 consensus_seq 文件中的序列。因此,理想情况下,我想获得一个修改过的 biological_data 表,该表将包含一个新列,其中包含该位置包含的共识序列列表。

理想结果方案:

类型 开始 结束 宽度 共识ID
A 171 884 714 1 2
A 20639 21148 510 NA
1287309 1287818 510 4

我不是生物信息学家,甚至我也不是天天用R或Python,所以对我来说很有挑战

所以,我找到了比较这些位置的开始和结束的最佳方法。 如果短共有序列的开始和结束包含在来自 biological_data 的序列范围内,则打印此共有序列 ID。

我试过:

ifelse (biological_data$start <= 171  &  biological_data$end >= 884, consensus_seq$ID, NA)

然后我从 biological_data 中得到一个位置列表,其中包含 consensus_sequence 1 ...但是,对每 8394 个序列手动执行它是不可能的,或者需要很多时间。

当我尝试过时:

ifelse (biological_data$start <= consensus_seq$Start  &  biological_data$end >= consensus_seq$end, consensus_seq$ID, NA)
  • 没成功:

警告信息: 1:在 biological_data$start <= consensus_seq$Start : longer object length is not a multiple of shorter object length 2: In biological_data$end >= consensus_seq$end 中: 较长的物体长度不是较短物体长度的倍数

如何自动化“ifelse process”?如何将第二个数据集(consensus_seq)的每个位置与第一个数据(biological_data)的每个位置进行比较?在 R 中有可能吗?

r if-statement comparison dna-sequence
© www.soinside.com 2019 - 2024. All rights reserved.