如何对r中的数值范围进行分类

如何对r中的数值范围进行分类,r,categories,R,Categories,我有一个数据框,其中每列对应patientID,每行对应一个特定的基因值 df <- data.frame(Hugo_Symbol=c("CDKN2A", "JUN", "IRS2","MTOR", "NRAS"), A183=c(-0.19,NA,2.01,0.4,1.23),

我有一个数据框,其中每列对应patientID,每行对应一个特定的基因值

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
但是,我收到了以下错误:

剪切错误。默认值(df,breaks=c(-Inf,-2,2,Inf),labels=c(“1”),为: “x”必须是数字

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

df2<- df[cut(df,
             breaks=c(-Inf,-2,2,Inf),
             labels=c("1","2","3"))]
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

您拥有的代码是正确的,但您需要将其应用于每一列。您可以通过基本R中的
lappy
执行此操作:

df[-1] <- lapply(df[-1], cut, c(-Inf,-2,2,Inf), c("1","2","3"))
df

#  Hugo_Symbol A183 A185 A186 A187 A188
#1      CDKN2A    2    2    2    3 <NA>
#2         JUN <NA>    3 <NA> <NA> <NA>
#3        IRS2    3 <NA>    3 <NA> <NA>
#4        MTOR    2 <NA>    2    2    3
#5        NRAS    2    2    2    3    2

我们可以在
base R

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

df[-1]请在问题文本中包含数据样本,而不是作为链接。这样做的一个好方法是包含运行
dput的输出(df[1:5,1:5])
这样我们就有了一个很小的5x5数据样本来处理。
df
是整个data.frame。它是否只有一个列或什么?否则您需要单独指定要转换的列。我不确定您何时使用
[]
在此处进行索引。区分转换data.frame本身和data.frame中的列很重要。但是
cut()
是此处使用的正确函数。我想转换data.frame本身。我为我的表添加了一个玩具示例。
df[-1] <- lapply(df[-1], findInterval, c(-Inf, -2, 2, Inf))