前面给大家介绍了☞【R语言】rep函数的使用,今天我们来举几个数据分析中的应用,例如差异表达分析时,样本类型变量,我们就可以使用rep函数来生成。
我们在☞GEO芯片数据差异表达分析 中分析的GSE68840这套数据,一共有7个样本,分别是
"plx4032 sensitivity: Sensitive" "plx4032 sensitivity: Sensitive" "plx4032 sensitivity: Sensitive" "plx4032 sensitivity: Resistant" "plx4032 sensitivity: Resistant" "plx4032 sensitivity: Resistant" "plx4032 sensitivity: Resistant"
3个Sensitive,4个Resistant,所以我们使用的是,下面这条命令
代码语言:javascript复制mRNA_sample_type=factor(c(rep("sensitive",3),rep("resistant",4)))
可以得到如下这个样本类型的因子,
有人肯定会好奇了,如果样本类型不是3个Sensitive,4个Resistant这种一类在一起的,该怎么处理呢?
我们再来看几个例子
假如我们的样本类型是下面这样的,交替排布的
normal tumor normal tumor normal tumor
代码语言:javascript复制rep(c("normal","tumor"),3)
再比如多出一个normal
normal tumor normal tumor normal tumor normal
代码语言:javascript复制c(rep(c("normal","tumor"),3),"normal")
有人又要说了,你这不还是很规律的吗?如果完全没有规律,该怎么处理。例如下面这样的。
normal tumor tumor normal tumor normal tumor
我们给大家介绍三种方法吧!
方法一、简单粗暴,但work,就是有点累,c()是yyds
一个一个敲出来,在样本数超过二三十就不建议使用这种方法了,费眼睛,费键盘。
代码语言:javascript复制c("normal","tumor","tumor","normal","tumor","normal","tumor")
方法二、巧用因子,事半功倍
☞【R语言】R中的因子(factor)
☞【R语言】因子在临床分组中的应用
我们不用敲完整的样本类型名字,用数字来代替,然后再用factor转回来。
代码语言:javascript复制#1=normal
#2=tumor
factor(c(1,2,2,1,2,1,2),levels=c(1,2),labels=c("normal","tumor"))
你会发现跟用c()得到的结果是一样的
方法三、登堂入室,活学活用
我们联合使用,strsplit函数 factor函数
在方法二中,我们相当于还是要用c()先创建一个数值向量,逗号还是要敲的。方法三,逗号都省了。我一直觉得“懒人”是第一生产力!
代码语言:javascript复制gsms <- "1221212"
#字符串分割成向量
sml <- strsplit(gsms, split="")[[1]]
#转成因子
gs <- factor(sml)
#将数字替换成样本类型
levels(gs) <- c("normal","tumor")
gs
上面介绍的三种方法,在样本数比较少的时候还是比较好用的,但是一旦样本数上百,上千了,以上三种方法都不太适用,后面我们再把“意大利炮”拉出来!大家先把鸟枪使好。
参考资料:
☞【R语言】rep函数的使用
☞ GEO芯片数据差异表达分析
☞【R语言】R中的因子(factor)
☞【R语言】因子在临床分组中的应用