r - R中的值区间窗口
问题描述
我有几个窗口间隔看起来像这样:
Start Stop
19136293 19138512
20708651 20716555
31063462 31064384
然后我的数据看起来像这样:
Read TrueC MapC TruePos MappedPos ResMap
JLN6 22 22 16050005 16050091 TP
9MRW 22 22 16050032 16050032 TP
GRR3 22 14 16050075 19792677 FP
V19X 22 * 17023341 0 FN
我正在尝试查找先前窗口内外的读取量;如果TruePos值在一个窗口间隔内,则读取在窗口内。我的目标是在窗口内外都有 TP/FP/FN(ResMap列)的数量。
我想在我的 Windows 文件上创建 for 循环,然后逐一检查我的数据的每一行并求和,但我有 6 亿行,我相信有一种最快的方法.. 我只是不知道。
非常感谢,
干杯,
卡加米
解决方案
由于您没有提供任何可重现的数据,因此我使用了自己的一些示例数据
dput(range)
structure(list(start = c(10L, 25L, 50L, 61L, 85L, 100L), end = c(15L,
27L, 53L, 66L, 89L, 102L)), class = "data.frame", row.names = c(NA,
-6L))
> range
start end
1 10 15
2 25 27
3 50 53
4 61 66
5 85 89
6 100 102
> dput(df)
structure(list(Id = 1:15, truepos = c(65L, 59L, 61L, 74L, 92L,
49L, 72L, 96L, 81L, 2L, 34L, 27L, 66L, 87L, 19L)), class = "data.frame", row.names = c(NA,
-15L))
> df
Id truepos
1 1 65
2 2 59
3 3 61
4 4 74
5 5 92
6 6 49
7 7 72
8 8 96
9 9 81
10 10 2
11 11 34
12 12 27
13 13 66
14 14 87
15 15 19
我已经使用名为的包fuzzyjoin
来执行此操作,它将添加一个新列,只要它在某个范围内时就会inside_range
给出值True
TRUEPOS
library(fuzzyjoin)
fuzzy_left_join(df, range, by = c("truepos" = "start", "truepos" = "end"),
match_fun = list(`>=`, `<`)) %>% mutate(inside_range = !is.na(start)) %>%
select(-start, -end)
> Id truepos inside_range
1 1 65 TRUE
2 2 59 FALSE
3 3 61 TRUE
4 4 74 FALSE
5 5 92 FALSE
6 6 49 FALSE
7 7 72 FALSE
8 8 96 FALSE
9 9 81 FALSE
10 10 2 FALSE
11 11 34 FALSE
12 12 27 FALSE
13 13 66 FALSE
14 14 87 TRUE
15 15 19 FALSE
我认为这符合您的目的,您可以在您的数据上复制这种方法df
。祝你好运
推荐阅读
- c# - 如何基于 URL 使用 Moq 对 HttpClient (HttpMessageHandler) 进行单元测试
- discord - 在 Java 中检查用户语音通道状态
- python - ModuleNotFoundError:测试时在 django 教程中没有名为“mysite.polls”的模块
- r - 根据之间的值提取数据
- python - Python if 语句总是返回 false,即使输入为 true
- javascript - 通过 Chrome 扩展程序单击 Google Docs 上的按钮
- discord.js - Discordjs dm 某些用户
- c++ - 是否可以在带有自定义规则的 bazel 中使用 C++20 模块?
- python - 是否有*任何*解决方案来打包使用 cppyy 的 python 应用程序?
- css - 在 CSS 中隐藏#text