【生信工具】R

【生信工具】R

项目需求

近期在处理单细胞项目数据,想对基因和read数构成的矩阵文件做进一步的处理,比如删除一些指定基因,删除一些指定细胞,查了一些材料并没发现合适的解决方案,所以有必要遂基于参考材料在具体描述一下这类数据处理方法。

#常规删除行列数据

dataly<- data.frame(a=1:2, b=2:3, c=3:4, d=4:5,e=5:6)

rownames(dataly)<- c("m","n")

dataly

a b c d e

m 1 2 3 4 5

n 2 3 4 5 6

#删除第一行

dataly1<- dataly[-1,]

#删除第三列

dataly2<- dataly[,-3]

积极实践

这种对于小样本来说处理比较方便,但是对于单细胞海量数据,这种处理方式显然是行不通的。特别是删除指定的基因或者细胞,对于具体所处的行列也不明确。比较直接的方式是直接根据行或者列的名字,直接匹配删除。接下来介绍一些基于这种类型数据的处理方式。

dataly

a b c d e

m 1 2 3 4 5

n 2 3 4 5 6

#删除b,d列的处理方式,-which 可以用!代替

dataly[ , -which(colnames(dataly) %in% c("b","d"))]

a c e

m 1 3 5

n 2 4 6

dataly[ , !colnames(dataly) %in% c("b","d")]

#删除n行的处理方式

dataly[!rownames(dataly) %in% c("n") , ]

a b c d e

m 1 2 3 4 5

他山之石

谷歌一下发现还有不少解决方案,个人比较喜欢这个。

#数据生成

X<-data.frame(A=c(1,2),B=c(3,4),C=c(5,6))

X

A B C

1 1 3 5

2 2 4 6

#如果我想删除一个列,比如B,只需在colnames上使用grep来获取列索引,然后可以使用该索引来省略列。

X[,-grep("B",colnames(X))]

A C

1 1 5

2 2 6

#grep的优点在于您可以指定与正则表达式匹配的多个列。如果我有五列X(A,B,C,D,E):

X<-data.frame(A=c(1,2),B=c(3,4),C=c(5,6),D=c(7,8),E=c(9,10))

X

A B C D E

1 1 3 5 7 9

2 2 4 6 8 10

#取出B栏和D栏:

X<-X[,-grep("B|D",colnames(X))]

A C E

1 1 5 9

2 2 6 10

#考虑到马修伦德伯格在下面的评论中的grepl建议:

> X<-data.frame(A=c(1,2),B=c(3,4),C=c(5,6),D=c(7,8),E=c(9,10))

> X

A B C D E

1 1 3 5 7 9

2 2 4 6 8 10

> X<-X[,!grepl("B|D",colnames(X))]

> X

A C E

1 1 5 9

2 2 6 10

#如果我尝试删除一个不存在的列,则不会发生任何事情:

> X<-X[,!grepl("G",colnames(X))]

> X

A C E

1 1 5 9

2 2 6 10

参考材料:

https://stackoverflow.com/questions/5234117/how-to-drop-columns-by-name-in-a-data-frame

相关推荐