r - 根据一个列值是否在另外两个列值之间(范围),将新列添加到带有标签的数据框中

标签 r dataframe dplyr

我有一个数据框(大约 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
...

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

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 范围内的 geneID,它们将被分配 ClusterID 名称,否则为 NA。所以一些前期的工作是输入标签向量。 (您可以编写一个函数来执行此操作。)但我认为它会起作用。

关于r - 根据一个列值是否在另外两个列值之间(范围),将新列添加到带有标签的数据框中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66876795/

相关文章:

python - 使用 pd.read_csv 打开 CSV 文件 - 上下文管理器的任何目的?

python - 用其他数据框中的值替换数据框中的值

r - 在计算其他汇总统计量的同时使用 n()

r - R中面板数据的相关矩阵

R:如何合并更多 2 个数据框并添加值?

Python:多维 Pandas 数据框

r - 如何使用 dplyr 和点省略号编写嵌套函数?

r - 如何参数化 dplyr 0.7 中的函数调用?

r - 尝试使用 R 中的函数在数据框中创建新列

javascript - Shiny 的 Javascript 事件不适用于 $(#id) jQuery 选择器