列合并
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))
#不相同时会有红字
行名重复解决办法
处理一些转录组数据时,经常会发现有的基因名是相同的,并不可以作为行名,这时就需要对重复的基因名进行操作
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匹配
网友评论