大家好日子
道歉,我甚至不确定如何把这个!我有一个有4列的SNP数据集(即snp,bta,position,maf)。使用R,如果maf <= 0.01,我需要环/染色体(bta)来识别7个连续SNP的窗口。一旦找到,如果距离&lt; = 300打印该行,则计算第1和第7 SNP(位置i + 6位置i)之间的距离。从第二条染色体开始,跨越所有染色体
snp bta position maf
1 1 135098 0.00
2 1 135198 0.01
3 1 135200 0.00
4 1 135220 0.01
5 1 135225 0.00
6 1 135230 0.01
7 1 135235 0.01
8 1 516404 0.27
9 1 571340 0.02
10 1 654413 0.07
11 1 845494 0.44
12 1 883895 0.42
13 1 905632 0.00
14 1 929617 0.20
15 1 950841 0.20
16 1 974586 0.04
17 2 1078200 0.01
18 2 1078256 0.00
19 2 1078280 0.01
20 2 1078300 0.00
21 2 1078400 0.00
22 2 1078410 0.01
23 2 1078450 0.00
我希望有类似下面的内容,
snp bta position maf
1 1 135098 0.00
2 1 267940 0.01
3 1 305793 0.00
4 1 353745 0.01
5 1 393248 0.00
17 2 1009504 0.01
18 2 1078256 0.00
19 2 1114422 0.01
20 2 1189382 0.00
我将非常感谢您的帮助
答案 0 :(得分:0)
将df data.frame作为提供的数据:
df <- read.table(text=readClipboard(), header=TRUE, stringsAsFactors = F )
r <- rle(df$bta)
df$window <- unlist(lapply(r$lengths, seq_len))
df
snp bta position maf window
1 1 1 135098 0.00 1
2 2 1 135198 0.01 2
3 3 1 135200 0.00 3
4 4 1 135220 0.01 4
5 5 1 135225 0.00 5
6 6 1 135230 0.01 6
7 7 1 135235 0.01 7
8 8 1 516404 0.27 8
9 9 1 571340 0.02 9
10 10 1 654413 0.07 10
11 11 1 845494 0.44 11
12 12 1 883895 0.42 12
13 13 1 905632 0.00 13
14 14 1 929617 0.20 14
15 15 1 950841 0.20 15
16 16 1 974586 0.04 16
17 17 2 1078200 0.01 1
18 18 2 1078256 0.00 2
19 19 2 1078280 0.01 3
20 20 2 1078300 0.00 4
21 21 2 1078400 0.00 5
22 22 2 1078410 0.01 6
23 23 2 1078450 0.00 7
library(dplyr)
res <- df %>%
group_by(bta) %>%
mutate(dif = position - first(position)) %>%
filter(maf <= 0.01, dif <= 300, window < 7)
res
Source: local data frame [12 x 6]
Groups: bta
snp bta position maf window dif
1 1 1 135098 0.00 1 0
2 2 1 135198 0.01 2 100
3 3 1 135200 0.00 3 102
4 4 1 135220 0.01 4 122
5 5 1 135225 0.00 5 127
6 6 1 135230 0.01 6 132
7 17 2 1078200 0.01 1 0
8 18 2 1078256 0.00 2 56
9 19 2 1078280 0.01 3 80
10 20 2 1078300 0.00 4 100
11 21 2 1078400 0.00 5 200
12 22 2 1078410 0.01 6 210