在数据框中使用Ifelse

Mee*_*sha 3 if-statement r dataframe

我正在使用的数据框架是

> df <- data.frame(Name=c("Joy","Jane","Jack","Jad"),M1=c(10,40,55,90))
> df
  Name M1
1  Joy 10
2 Jane 40
3 Jack 55
4  Jad 90

> df$Final <- ifelse(df$M1<=50,60,max(75,df$M1))
> df
  Name M1 Final
1  Joy 10    60
2 Jane 40    60
3 Jack 55    90
4  Jad 90    90
Run Code Online (Sandbox Code Playgroud)

如果M1值小于或等于50,那么我需要60作为我的最终值,而如果M1值大于50则我需要最大值(75,M1).在Jack的情况下,M1是55,所以我应该得到最大值(75,55),这是75.我认为它给了我整个M1列的最大值.怎么避免这个?

期望的输出

  Name M1 Final
1  Joy 10    60
2 Jane 40    60
3 Jack 55    75
4  Jad 90    90
Run Code Online (Sandbox Code Playgroud)

lmo*_*lmo 8

您也可以使用pmax而不是max:

ifelse(df$M1 <= 50, 60, pmax(75, df$M1))
Run Code Online (Sandbox Code Playgroud)

从帮助文件中pmax获取

一个或多个向量(或矩阵)作为参数并返回单个向量,给出向量的"并行"最大值.结果的第一个元素是所有参数的第一个元素的最大值......结果的第二个元素是所有参数的第二个元素的最大值......依此类推.

因此ifelse,"else"值的第三个参数是成对最大值75(根据需要再循环多次)和df $ M1的值.

  • 好一个.没有`ifelse()`完成'替换(pmax(75,df $ M1),df $ M1 <= 50,60)`不确定是否有任何效率优势. (2认同)