r语言 - 在使用两个不同列的行之间进行突变



我有这个tabl/data.frame与基因名称,TSS(开始)和GeneEnd(结束):

Genes       TSS GeneEnd
<chr>     <int>   <int>
1 homt-1     4221   10148
2 nlp-40    11641   16585
3 rcor-1    17911   26778
4 sesn-1    28280   32482
5 Y74C9A.1  43733   44677
6 Y48G1C.12 47472   49416
7 pgs-1     49921   54360
8 Y48G1C.5  55337   63972
9 csk-1     71425   80344
10 Y48G1C.10 81234   90607

我需要创建一个新的列来计算一个基因的TSS(开始)和前一个基因的GeneEnd(结束)之间的差异。例如nlp-40,它将是11641-10148。

这可能吗?

您可以使用lag来获取GeneEnd的上一个值。

library(dplyr)
df <- df %>% mutate(diff = TSS - lag(GeneEnd))
df
#       Genes   TSS GeneEnd  diff
#1     homt-1  4221   10148    NA
#2     nlp-40 11641   16585  1493
#3     rcor-1 17911   26778  1326
#4     sesn-1 28280   32482  1502
#5   Y74C9A.1 43733   44677 11251
#6  Y48G1C.12 47472   49416  2795
#7      pgs-1 49921   54360   505
#8   Y48G1C.5 55337   63972   977
#9      csk-1 71425   80344  7453
#10 Y48G1C.10 81234   90607   890

这也可以在碱R和data.table中实现-

#data.table
library(data.table)
setDT(df)[, diff := TSS - shift(GeneEnd)]
#Base R
transform(df, diff = TSS - c(NA, GeneEnd[-nrow(df)]))

最新更新