Ifelse() 在 R 中具有三个条件

Vin*_*nay 2 r

我有如下数据:

    RNA$MMP2
 [1]  1.506000000  0.957833333  2.285500000 -0.089333333 -1.233166667
 [6]  1.591500000 -1.396500000 -0.260500000  0.583000000 -0.716333333
[11]  1.628833333 -0.390000000 -0.466166667 -0.550666667  1.001666667
[16]  1.399000000 -0.454500000 -0.492833333  0.695166667  0.397666667  
Run Code Online (Sandbox Code Playgroud)

如果我要根据某个阈值(例如 1.0)用字符变量替换这些数字变量,我会实现以下内容:

ifelse(RNA$MMP2 <= 1.0 ,"low","high")->x
Run Code Online (Sandbox Code Playgroud)

如果我需要分类为三个字符变量怎么办:

a) RNA$MMP2 < 0.5 ,"low"; 

b) RNA$MMP2 > 0.5 and < 1.0, "medium";

c) RNA$MMP2 > 1.0, "high";
Run Code Online (Sandbox Code Playgroud)

建议将不胜感激。

akr*_*run 5

一种选择是cut针对多种情况执行此操作

cut(RNA$MMP2, breaks = c(-Inf, 0.5, 1.0, Inf), 
        labels = c("low", "medium", "high"))
Run Code Online (Sandbox Code Playgroud)

如果有两个以上的组,ifelse则需要嵌套

with(RNA, ifelse(MMP2 < 0.5, "low", 
          ifelse(MMP2 >= 0.5 & MMP2 < 1.0, "medium", "high")) 
Run Code Online (Sandbox Code Playgroud)


jul*_*ljo 5

dplyrcase_when()对于这些类型的情况来说,这是一个很好的选择:

library(dplyr)

RNA %>% mutate(MMP2 = case_when(
  MMP2 < 0.5 ~ "low",
  MMP2 > 0.5 & MMP2 < 1 ~ "medium",
  MMP2 > 1 ~ "high"
))
Run Code Online (Sandbox Code Playgroud)