簡體   English   中英

如何對 r 中的數值范圍進行分類

[英]How to categorize numerical ranges in 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 function 來做到這一點。 我的代碼如下所示:

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

但是,我收到以下錯誤:

cut.default(df, breaks = c(-Inf, -2, 2, Inf), labels = c("1", : 'x' must be numeric) 中的錯誤

我相信這是因為我的表中有 NA 值。 我不知道如何為 NA 值分配類別“0”。 所需的 output 應如下所示:

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

如何修復此錯誤並將每個值替換為我上面提到的預定義類別?

謝謝您的幫助!

奧爾哈

您擁有的代碼是正確的,但您需要為每一列應用它。 您可以通過基礎lapply中的 lapply 來完成:

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

或者across dplyr中使用:

library(dplyr)

df %>% mutate(across(starts_with('A'), cut, c(-Inf,-2,2,Inf),c("1","2","3")))

我們可以在base R中使用findInterval

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM