根据一个列值是否位于其他两个列值(范围)之间,将新列添加到带标签的数据框中

2024-04-08

我有一个数据框(大约有 300 行),其中一列称为“geneID”:

geneID   distance  pvalue
4        30        0.05
409      0         0.001
60       41        0.02
...

我有第二个数据框,指示构成更大抗生素生物合成基因簇的基因范围(染色体中大约有 30 个基因簇):

ClusterID           start   end
Chloramphenicol     100     130
NRPS                403     489
Terpene             5021    5109
...

我想要做的是,如果基因 ID 位于该基因簇的“开始”和“停止”之间,则向数据帧 1 添加另一列,标记为数据帧 2 的相应“簇 ID”:

geneID   distance  pvalue  ClusterID
4        30        0.05    NA
409      0         0.001   NRPS
60       41        0.02    NA

我尝试过使用向量作为 mutate 函数中的值:

ChIP_table %>%
  mutate(ClusterID = case_when((ID >= biosynthetic_clusters$start & ID <= biosynthetic_clusters$end) ~ biosynthetic_clusters$Cluster,
                               TRUE ~ "NA"))

这不起作用。不知道从这里去哪里。我尝试构建一个 for 循环,但仍然无法找到使用向量/列值作为排序/标签条件的方法。

任何帮助,将不胜感激!


你可以使用cut功能。假设你的数据框是df:

breaks <- c(100, 130, 403, 489, 5021, 5109)
labels <- c("Chloramphenicol", NA, "NRPS", NA, "Terpene")

df$ClusterID <- cut(df$geneID, breaks = breaks, labels = labels, include.lowest = TRUE)

中断是开始值、结束值。标签是每个可行范围的 ClusterID 名称。 NA 标签用于可行的范围间隙。因此,对于属于 ClusterID 范围内的基因 ID,它们将被分配 ClusterID 名称,否则为 NA。因此,需要一些预先的工作来输入标签向量。 (你可以编写一个函数来做到这一点。)但我认为它会起作用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据一个列值是否位于其他两个列值(范围)之间,将新列添加到带标签的数据框中 的相关文章

随机推荐