gpt4 book ai didi

r - 如何在 R 中的 y 数据框中找到最接近 x 的值?

转载 作者:行者123 更新时间:2023-12-05 08:45:16 26 4
gpt4 key购买 nike

我有两个数据框 x 和 y,它们都代表项目及其各自的位置(以整数表示)。 Dataframe x 响应 Genes 及其位置; dataframe y 响应增强器及其位置。对于数据框 x 中的每个基因,我想在 y 中找到位置最近的增强子。这是两个数据框的前五行:

Gene:           | Location:                            
----------------------------------
CORT | 10450031
LOC107985174 | 110639954
LOC105369199 | 120963648
CD1D | 158178030
EPHA2 | 16124337


Enhancer: | Location:
-----------------------------------------------------
genic|NC_000001.11:180541-181713 | 180541
genic|NC_000001.11:819650-823755 | 819650
genic|NC_000001.11:1290023-1294341 | 1290023
genic|NC_000001.11:2072541-2076498 | 2072541
genic|NC_000001.11:2132164-2134268 | 2132164

我一直在像这样使用 which.min():Enhancers[which.min(abs(x-Enhancers$location)),] where x 对应于给定基因的位置,这似乎有效,但它需要手动输入每个单独基因的位置。我想知道是否有一种方法可以同时对所有基因完成此操作。任何帮助将不胜感激,谢谢。

最佳答案

您可以展开包含两个数据集的网格,按基因分组并选择每个基因的位置绝对差异最小的行。

library(tidyr)
library(dplyr)
#>
#> Attache Paket: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union

set.seed(2105)

x <- data.frame(Gene = letters[1:5], Location = 1:5)
y <- data.frame(Enhancer = letters[6:10], Location_enh = 5*runif(5))

x
#> Gene Location
#> 1 a 1
#> 2 b 2
#> 3 c 3
#> 4 d 4
#> 5 e 5
y
#> Enhancer Location_enh
#> 1 f 1.2275958
#> 2 g 2.2874741
#> 3 h 4.2954764
#> 4 i 4.2017862
#> 5 j 0.9555975

expand_grid(x, y) %>%
group_by(Gene) %>%
slice_min(abs(Location - Location_enh)) %>%
ungroup()
#> # A tibble: 5 x 4
#> Gene Location Enhancer Location_enh
#> <chr> <int> <chr> <dbl>
#> 1 a 1 j 0.956
#> 2 b 2 g 2.29
#> 3 c 3 g 2.29
#> 4 d 4 i 4.20
#> 5 e 5 h 4.30

reprex package 创建于 2022-08-15 (v2.0.1)

关于r - 如何在 R 中的 y 数据框中找到最接近 x 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73365066/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com