生物信息学随笔-生活工作点滴

R语言数据操作

2019-07-10  本文已影响2人  nnlrl

列合并

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匹配

上一篇下一篇

猜你喜欢

热点阅读