前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R-apply| 基因表达量批量二分类,Get!(修正版)

R-apply| 基因表达量批量二分类,Get!(修正版)

作者头像
生信补给站
发布2020-08-06 11:31:28
6680
发布2020-08-06 11:31:28
举报
文章被收录于专栏:生信补给站生信补给站

生信或者数据挖掘中经常会遇到需要把连续的表达量数据转为分类变量。比如基因表达量二分类进行后续的生存分析。

一 读入数据

读入TCGA的表达量数据,截取部分数据进行示范

代码语言:javascript
复制
#TCGA的表达量数据
#setwd()
data <- read.csv("Expr_median.csv",header=TRUE,row.names=1,check.names=FALSE)
data <- as.data.frame(t(data))data[1:4,1:4]
  • row.names=1 :读入数据的第一列作为行名
  • check.names=FALSE:标题保持原样

可以自行试一下,分别去掉这两个参数,然后比较下数据的差异

二 批量转化

1 ifelse转化单一列
代码语言:javascript
复制
#将TCGA-97-7938-01A根据medain转为 高 低
data1 <- data
data1[,"ENSG00000000003.13"] <- ifelse(data1[,"ENSG00000000003.13"] > median(data1[,"ENSG00000000003.13"]),"High","Low")
data1[1:4,1:4]

可以看到ENSG00000000003.13基因的表达量已经转为高 低 二分类了。

分段阈值:还可以是均值,四分卫,10%,或者具体数值
代码语言:javascript
复制
#按照均值分
data1[,"ENSG00000000460.15"] <- ifelse(data1[,"ENSG00000000460.15"] > mean(data1[,"ENSG00000000460.15"]),"High","Low")
#按照75%分
data1[,"ENSG00000000419.11"] <- ifelse(data1[,"ENSG00000000419.11"] > quantile(data1[,"ENSG00000000419.11"],0.75),"High","Low")
#按照具体数值分
data1[,"ENSG00000000457.12"] <- ifelse(data1[,"ENSG00000000457.12"] > 10,"High","Low")
data1[1:4,1:4]
2 批量转化

当列数较少时,可以按照上述方式,一个个完后分类。当太多时,需要批量完成!

代码语言:javascript
复制
#使用apply,批量完成转化
data2 <- data
data2 <- apply(data2, 2, function(x) {ifelse(x >= median(x), "hign", "low")})
head(data2)

批量已完成,省时省力!

3 for循环完成
代码语言:javascript
复制
data3 <- data
for (i in colnames(data3)){
  data3[,i] <- ifelse(data3[,i] >= median(data3[,i]),"high","low")
}

实现方式很多,根据个人习惯,自取!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信补给站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 ifelse转化单一列
    • 分段阈值:还可以是均值,四分卫,10%,或者具体数值
    • 2 批量转化
    • 3 for循环完成
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档