首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中两个范围的重叠量[DescTools?]

R中两个范围的重叠量[DescTools?]
EN

Stack Overflow用户
提问于 2021-03-26 00:17:12
回答 2查看 48关注 0票数 2

我需要知道两个数字范围有多少个整数重叠。我尝试使用DescTools::Overlap,但输出不是我所期望的。

代码语言:javascript
复制
library(DescTools)
library(tidyr)

df1 <- data.frame(ID = c('a', 'b', 'c', 'd', 'e'), 
                  var1 = c(1, 2, 3, 4, 5),
                  var2 = c(9, 3, 5, 7, 11))
df1 %>% setNames(paste0(names(.), '_2')) %>% tidyr::crossing(df1) %>% filter(ID != ID_2) -> pairwise

pairwise$overlap <- DescTools::Overlap(c(pairwise$var1,pairwise$var2),c(pairwise$var1_2,pairwise$var2_2)) 

对于上面创建的测试数据集中的每一行,输出(整列)是'10‘。我想要每一行的特定重叠,因此前3列将分别是2,3,4。

EN

回答 2

Stack Overflow用户

发布于 2021-03-26 01:34:09

我发现最简单的方法就是使用rowwise。这个操作过去是不被推荐的,但是自从dplyr 1.0.0发布后,它在性能方面得到了改进。

代码语言:javascript
复制
pairwise %>%
    rowwise() %>%
    mutate(overlap = Overlap(c(var1, var2), c(var1_2, var2_2))) %>%
    ungroup()
#> # A tibble: 20 x 7
#>    ID_2  var1_2 var2_2 ID     var1  var2 overlap
#>    <chr>  <dbl>  <dbl> <chr> <dbl> <dbl>   <dbl>
#>  1 a          1      9 b         2     3       1
#>  2 a          1      9 c         3     5       2
#>  3 a          1      9 d         4     7       3
#>  4 a          1      9 e         5    11       4
#>  5 b          2      3 a         1     9       1
#>  6 b          2      3 c         3     5       0
#>  7 b          2      3 d         4     7       0
#>  8 b          2      3 e         5    11       0
#>  9 c          3      5 a         1     9       2
#> 10 c          3      5 b         2     3       0
#> 11 c          3      5 d         4     7       1
#> 12 c          3      5 e         5    11       0
#> 13 d          4      7 a         1     9       3
#> 14 d          4      7 b         2     3       0
#> 15 d          4      7 c         3     5       1
#> 16 d          4      7 e         5    11       2
#> 17 e          5     11 a         1     9       4
#> 18 e          5     11 b         2     3       0
#> 19 e          5     11 c         3     5       0
#> 20 e          5     11 d         4     7       2
票数 3
EN

Stack Overflow用户

发布于 2021-03-26 01:43:32

我的带有apply函数的版本

代码语言:javascript
复制
pairwise$overlap <- apply(pairwise, 1,
                          function(x) DescTools::Overlap(as.numeric(c(x[5], x[6])), 
                                                 as.numeric(c(x[2],x[3])))) 
pairwise
# A tibble: 20 x 7
   ID_2  var1_2 var2_2 ID     var1  var2 overlap
   <chr>  <dbl>  <dbl> <chr> <dbl> <dbl>   <dbl>
 1 a          1      9 b         2     3       1
 2 a          1      9 c         3     5       2
 3 a          1      9 d         4     7       3
 4 a          1      9 e         5    11       4
 5 b          2      3 a         1     9       1
 6 b          2      3 c         3     5       0
 7 b          2      3 d         4     7       0
 8 b          2      3 e         5    11       0
 9 c          3      5 a         1     9       2
10 c          3      5 b         2     3       0
11 c          3      5 d         4     7       1
12 c          3      5 e         5    11       0
13 d          4      7 a         1     9       3
14 d          4      7 b         2     3       0
15 d          4      7 c         3     5       1
16 d          4      7 e         5    11       2
17 e          5     11 a         1     9       4
18 e          5     11 b         2     3       0
19 e          5     11 c         3     5       0
20 e          5     11 d         4     7       2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66803562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档