用 R 中 diff() 函數(shù)和 lag() 函數(shù)求每個基因中相鄰位點間的距離

圖床放在 github, 有時候看不到圖沒關(guān)系,運行一遍就行了。(好吧我兩個都放,簡書自己的也放一個。)
前幾天師兄問我一個小問題,說有一堆基因,每個基因上又不同的位點,想看下每個基因?qū)?yīng)的后一個位點與前面位點的距離。聽起來有點 斐波那契數(shù)列 的味道,只是這里是求位點間的距離。按照基因分組,對位置排序,然后后面的位置減去前面的位置,說這么多好像沒有一個圖來的實際。

image

簡書圖床。。

emm, 既然需求說清楚了,那就搞起來。

數(shù)據(jù)長這樣

Proteinaccession    Position
A0A0N7KCG8  92
A0A0N7KCG8  97
A0A0N7KCG8  138
A0A0N7KCG8  261
A0A0N7KD63  16
A0A0N7KD71  191
A0A0N7KDI2  14
A0A0N7KEK0  86
A0A0N7KEL2  112
A0A0N7KEN1  498
A0A0N7KEN1  513
A0A0N7KFI2  241
A0A0N7KFL5  11
A0A0N7KG02  356
A0A0N7KGS3  137
A0A0N7KH16  81
A0A0N7KH54  148
A0A0N7KH54  184
A0A0N7KI17  359
A0A0N7KI20  77
A0A0N7KI20  224
A0A0N7KI20  282
A0A0N7KIR0  18
A0A0N7KIR1  104
A0A0N7KIR1  285
A0A0N7KJ67  81
A0A0N7KJB1  342
A0A0N7KJF4  78
A0A0N7KK10  235
A0A0N7KK10  256
A0A0N7KK10  279
A0A0N7KK90  387
A0A0N7KKI3  21
A0A0N7KKT9  50
A0A0N7KLH2  307
A0A0N7KLN6  9
A0A0N7KLY1  1033
A0A0N7KMN9  220

R 中進行操作

  • 這里我們只采用兩種方法,當然方法是無窮無盡的。分別是利用 lag() 函數(shù)和 diff() 函數(shù)
  • 只有一個位點的基因這里不做考慮,所以在分析前就用 n() > 1 過濾
# copy 上面的示例數(shù)據(jù),然后直接從剪切面板導(dǎo)入數(shù)據(jù),不知道啥操作,自行百度一下就知道了。
data <- read.table(file = "clipboard", header = T, sep = "\t")

library(tidyverse)

# 第一種方法使用 lag() 函數(shù),簡單明了
data1 <- data %>%
  group_by(Proteinaccession) %>%
  filter(n() > 1) %>% # 過濾掉只有一個位點的基因
  mutate(end = lag(Position),
         distance = Position - lag(Position)) %>%
  ungroup() 
  
# 第二種方法與 lag() 函數(shù)類似
data2 <- data %>%
  group_by(Proteinaccession) %>%
  filter(n() > 1) %>% # 過濾掉只有一個位點的基因
  mutate(end = c(NA, Position[-n()]),
         distance = c(NA, diff(Position))) %>%
  ungroup() 

最后得到的結(jié)果就是這樣的。


image

簡書圖床。。

最后安利一些函數(shù)大家了解一下:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容