如何对r中的数值范围进行分类 [英] How to categorize numerical ranges in r

查看:22
本文介绍了如何对r中的数值范围进行分类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个数据框,其中每列对应于患者ID,每行对应于一个特定的基因值。

df <- data.frame(Hugo_Symbol=c("CDKN2A", "JUN", "IRS2","MTOR",
                           "NRAS"),
                  A183=c(-0.19,NA,2.01,0.4,1.23),
                  A185=c(0.11,2.45,NA,NA,1.67),
                  A186=c(1.19,NA,2.41,0.78,1.93),
                  A187=c(2.78,NA,NA,0.7,2.23),
                  A188=c(NA,NA,NA,2.4,1.23))
head(df)

  Hugo_Symbol  A183 A185 A186 A187 A188
1      CDKN2A -0.19 0.11 1.19 2.78   NA
2         JUN    NA 2.45   NA   NA   NA
3        IRS2  2.01   NA 2.41   NA   NA
4        MTOR  0.40   NA 0.78 0.70 2.40
5        NRAS  1.23 1.67 1.93 2.23 1.23

我想为每个值分配以下类别:

  • 如果范围(-inf,-2)中的值分配类别1
  • 如果范围(-2,2)中的值分配类别2
  • 如果范围(2,inf)中的值分配类别3
  • 如果值为NA,则分配类别(&0)

我尝试使用cut函数来执行此操作。我的代码如下所示:

df2<- df[cut(df,
             breaks=c(-Inf,-2,2,Inf),
             labels=c("1","2","3"))]

但是,我收到以下错误:

Cut.Default(df,Break=c(-inf,-2,2,inf),Labels=c(&Quot;1&Quot;,: "x"必须是数字

我相信这是因为我的表中有NA值。我不知道如何为NA值分配类别&0&。所需的输出应如下所示:

Hugo_Symbol A183 A185 A186 A187 A188
1      CDKN2A    2    2    2    1    0
2         JUN    0    1    0    0    0
3        IRS2    1    0    1    0    0
4        MTOR    2    0    2    2    1
5        NRAS    2    2    2    1    2

如何修复此错误并用上面提到的预定义类别替换每个值?

感谢您的帮助!

Olha

推荐答案

我们可以在base R中使用findInterval

df[-1] <- lapply(df[-1], findInterval, c(-Inf, -2, 2, Inf))

这篇关于如何对r中的数值范围进行分类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆