我希望在数字区间内获得比例通讯员到pos
的新列df
:
df <- "SNP CHR BP P
pr1 1 1 1
pr2 1 10 1
pr3 1 11 1
pr6 2 1 1
pr7 2 2 1
pr8 2 3 1
pr8 2 9 1"
df <- read.table(text=df, header=T)
在df
我试图让通讯员到BP
栏。 BP
列从1
(CHR 1
)到9
(CHR 2
)。考虑BP
中df
的总时间间隔为1
,我们得到:从20
到from
。我之前知道要比较的限制,即-20
to
20
20
。因此,我们将df
(BP
40
中的时间间隔)与dfout
(要比较的时间间隔)进行比较。然而,从一行到另一行,我们有不同的距离&#34;。
这是我期望的输出dfout <- "SNP CHR BP P pos
pr1 1 1 1 -20
pr2 1 10 1 0
pr3 1 11 1 2
pr6 2 1 1 4
pr7 2 2 1 6
pr8 2 3 1 8
pr8 2 9 1 20"
dfout <- read.table(text=dfout, header=T)
:
CHR
您可以将我的数据理解为一个曼哈顿情节。每条染色体(SNPs
)都有特定的CHR
来绘制。每个x-axis
将按顺序绘制。然后在y-axis
中,我们将获得一个唯一的时间间隔(P
将是x-axis
,但无需访问此问题)。我以前知道这个from -20 to 20
间隔(x-axis
)。然后,我想根据CHR
和BP
分配df$pos <- seq(from = -20, to = 20, length.out = nrow(df))
的比例数。
我正在寻找一些技巧:
seq
我在SNP
中使用的问题是每个&#34; pr1
&#34;将被分配一个对应的号码,忽略探测之间的信号间隔(例如:pr2
和pr6
之间的距离与pr7
和((((df[2,3] - df[1,3]))+1)*2)-(((df[2,3]-df[1,3])+1)*2)
相比完全不同。
此代码dfout[2,5]
足以达到pos
中的预期值。我们乘以2是因为BP
的间隔比BP
中的值大两倍(20
中的总间隔== pos
,40
中的总间隔= = <ul>
)。
有什么想法吗?