查看: 291|回复: 1

[R语言] R-apply| 基因表达量批量二分类,Get!

[复制链接]
  • TA的每日心情

    2016.7.20 14:55
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    帝王蝶

    Rank: 4

    主题
    25
    奥币
    756
    积分
    314
    注册时间
    2016.3.21
    在线时间
    73 小时

    发表于 2020.3.25 23:33:05 | 显示全部楼层 |阅读模式
                                                                                                                        生信或者数据挖掘中经常会遇到需要把连续的表达量数据转为分类变量。比如基因表达量二分类进行后续的生存分析。
    一 读入数据
    读入TCGA的表达量数据,截取部分数据进行示范#TCGA的表达量数据
    #setwd()
    data <- read.csv("Expr_median.csv",header=TRUE,row.names=1,check.names=FALSE)
    data[1:4,1:4]
                       TCGA-97-7938-01A TCGA-55-7574-01A TCGA-05-4250-01A TCGA-55-6979-11A
    ENSG00000000003.13        10.989394         9.967226        12.386940         9.014020
    ENSG00000000005.5          4.000000         0.000000         2.584963         0.000000
    ENSG00000000419.11        10.253847         9.541097        11.501340         9.204571
    ENSG00000000457.12         9.776433         9.131857         9.521600         8.499846
    row.names=1 :读入数据的第一列作为行名check.names=FALSE:标题保持原样可以自行试一下,分别去掉这两个参数,然后比较下数据的差异
    二 批量转化
    1, ifelse转化单一列#将TCGA-97-7938-01A根据medain转为 高 低
    data1 <- data
    data1[,"TCGA-97-7938-01A"] <- ifelse(data1[,"TCGA-97-7938-01A"] > median(data1[,"TCGA-97-7938-01A"]),"High","Low")
    data1[1:4,1:4]
                       TCGA-97-7938-01A TCGA-55-7574-01A TCGA-05-4250-01A TCGA-55-6979-11A
    ENSG00000000003.13             High         9.967226        12.386940         9.014020
    ENSG00000000005.5               Low         0.000000         2.584963         0.000000
    ENSG00000000419.11              Low         9.541097        11.501340         9.204571
    ENSG00000000457.12              Low         9.131857         9.521600         8.499846
    可以看到TCGA-97-7938-01A样本的表达量已经转为高 低 二分类了。
    分段的阈值还可以是均值,四分卫,10%,或者具体数值#按照均值分
    data1[,"TCGA-55-7574-01A"] <- ifelse(data1[,"TCGA-55-7574-01A"] > mean(data1[,"TCGA-55-7574-01A"]),"High","Low")
    #按照75%分
    data1[,"TCGA-55-6979-11A"] <- ifelse(data1[,"TCGA-55-6979-11A"] > quantile(data1[,"TCGA-55-6979-11A"],0.75),"High","Low")
    #按照具体数值分
    data1[,"TCGA-05-4250-01A"] <- ifelse(data1[,"TCGA-05-4250-01A"] > 10,"High","Low")
    data1[1:4,1:4]
                       TCGA-97-7938-01A TCGA-55-7574-01A TCGA-05-4250-01A TCGA-55-6979-11A
    ENSG00000000003.13             High             High             High              Low
    ENSG00000000005.5               Low              Low              Low              Low
    ENSG00000000419.11              Low             High             High              Low
    ENSG00000000457.12              Low             High              Low              Low

    2 批量转化当列数较少时,可以按照上述方式,一个个完后分类。当太多时,需要批量完成!#使用apply,批量完成转化
    data2 <- data
    data2 <- apply(data2, 2, function(x) {ifelse(x >= median(x), "hign", "low")})
    head(data2)

    批量已完成,省时省力!

    3 for循环完成data3 <- data
    for (i in colnames(data3)){
      data3[,i] <- ifelse(data3[,i] > median(data3[,i]),"high","low")
    }

    实现方式很多,根据个人习惯,自取!
    PS:有个交流的讨论组,想沟通交流的,后台回复”入群“即可。



    精心整理(含图版)|R语言生信分析,可视化,你要的全拿走,建议收藏!

                                    

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x

    最近看过此主题的会员

    回复

    使用道具 举报

  • TA的每日心情

    前天 13:16
  • 签到天数: 29 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    中华鲟

    Rank: 5Rank: 5

    主题
    0
    奥币
    413
    积分
    653
    注册时间
    2020.1.16
    在线时间
    14 小时

    发表于 2020.3.26 09:35:56 | 显示全部楼层
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表