使用apply替换数据框中的多个值

Al1*_*l14 1 r apply

我想使用apply来替换数据帧中的值,如果> 8 1星,如果> 10 2星,如果> 12 3星,否则NS.

mydata<-data.frame(A=1:10, B=3:12, C=5:14)
apply(mydata, 2, function(x) ifelse(x > 12, "***"|x > 10, "**"|x >= 8, "*"|x <8, "NS", x))
Run Code Online (Sandbox Code Playgroud)

Jaa*_*aap 6

一个tidyverse替代用case_when:

mydata %>% 
  mutate_all(funs(case_when(. > 12 ~ '***',
                            . > 10 & . <= 12 ~ '**',
                            . >= 8 & . <= 10 ~ '*',
                            . < 8 ~ 'NS')))
Run Code Online (Sandbox Code Playgroud)

这使:

    A  B   C
1  NS NS  NS
2  NS NS  NS
3  NS NS  NS
4  NS NS   *
5  NS NS   *
6  NS  *   *
7  NS  *  **
8   *  *  **
9   * ** ***
10  * ** ***
Run Code Online (Sandbox Code Playgroud)


Flo*_*ian 5

请注意,要使用嵌套ifelse语句,您需要将下一个ifelse作为第三个参数(else参数)放在父语句中ifelse.所以你可以尝试以下方法:

ifelse(mydata > 12, "***", ifelse(mydata >= 10, "**", ifelse(mydata >= 8, "*", "NS")))
Run Code Online (Sandbox Code Playgroud)

输出:

      A    B    C    
 [1,] "NS" "NS" "NS" 
 [2,] "NS" "NS" "NS" 
 [3,] "NS" "NS" "NS" 
 [4,] "NS" "NS" "*"  
 [5,] "NS" "NS" "*"  
 [6,] "NS" "*"  "**" 
 [7,] "NS" "*"  "**" 
 [8,] "*"  "**" "**" 
 [9,] "*"  "**" "***"
[10,] "**" "**" "***"
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!