列合并
cbind(a,b)
#根據列進行合并,即疊加所有列,a列的矩陣與b列的矩陣cbind()最后變成a+b列,合并前提:cbind(a, b)中矩陣a、b的行數必需相符
merge(a,b,by='colname')
#以某一列為基準對a,b進行合并
行合并
rbind(a,b)
#根據行進行合并,就是行的疊加,a行的矩陣與b行的矩陣rbind()最后變成a+b行,合并前提:rbind(a, b)中矩陣a、b的列數必需相符
數據排序
match(x, table, nomatch = NA_integer_, incomparables = NULL);
#匹配兩個向量,返回向量x中的元素在table中出現的位置;
兩數據的交集,并集,補集
交集
# 兩個數值向量取交集
intersect(x=1:4, y = 2:6)
# [1] 2 3 4
# 兩個字符向量取交集
intersect(x=letters[1:4], y = letters[2:6])
# [1] "b" "c" "d"
# 混合向量
intersect(x=c("a", "b", "c", 4), y = c("a", 2, 3, 4))
[1] "a" "4"
并集
# 兩個數值向量取并集
union(x=1:4, y = 2:6)
# [1] 1 2 3 4 5 6
# 兩個字符向量取并集
union(x=letters[1:4], y = letters[2:6])
# [1] "a" "b" "c" "d" "e" "f"
# 混合向量
union(x=c("a", "b", "c", 4), y = c("a", 2, 3, 4))
[1] "a" "b" "c" "4" "2" "3"
判斷不同
x = 1:4
y = 2:6
# 找x中不同于y的元素
setdiff(x, y)
# [1] 1
# 找y中不同于x的元素
setdiff(y, x)
# [1] 5 6
判斷是否相同
identical(a,b)
#返回邏輯型向量,相同返回True,不相同返回False
stopifnot(identical(a,b))
#不相同時會有紅字
行名重復解決辦法
處理一些轉錄組數據時,經常會發(fā)現有的基因名是相同的,并不可以作為行名,這時就需要對重復的基因名進行操作
data=avereps(data)
#對行取平均值,屬于edgeR包
uniquifyFeatureNames(
ID=paste0("ENSG0000000", 1:5),
names=c("A", NA, "B", "C", "A")
)
#屬于scater包,對重復的基因名采取前后疊加的方式獲得不同的基因名,保證最大程度的數據保留
數據類型轉換
dimnames=list(rownames(rt),colnames(rt))
data=matrix(as.numeric(as.matrix(rt)),nrow=nrow(rt),dimnames=dimnames)
#或者使用apply函數
apply(rt,1,as.numeric)
字符串操作
library(stringr)
rownames(exprSet) = str_split(rownames(exprSet),'[.]',simplify = T)[,1]
#常見的去除Ensembl基因名的版本號
group_list=ifelse(as.numeric(substr(colnames(exp),14,15)) < 10,'tumor','normal')
#常見的TCGA按照01和11劃分癌癥組織和癌旁組織
正則表達式的應用
\b 單詞的開始或者結尾
. 匹配除了換行符之外的任意一個字符
\d 匹配一個數字,與[0-9]同理
\s 匹配任意的空白字符,包括空格,制表符,換行符
\w匹配一個字母,包括字符,下劃線,漢字等
^ 匹配字符串的開頭
$ 匹配字符串的結尾
? 指定內容重復0次或者1次
+ 指定內容重復1次至多次
* 指定內容重復0次至多次
{}指定前面內容重復的次數
[]匹配其中的任意一個字符(0-9,a-c)
()給字符分組,用\1,\2匹配