如何使用lapply根据条件使用多种功能

时间:2019-05-02 17:37:03

标签: r apply lapply

我有一个问题,关于在使用条件的情况下使用多个功能。 这是数据帧

Data <- data.frame(c(1:6),c(7:12), c(1,0,1,0,1,1), 0)
colnames(Data) <- c("a","b","c","d")

我希望基于条件将输出应用于每行,例如在这种情况下,如果col c为1,我想使用min函数,如果col c为0,我想使用max函数。 >

我尝试过

Output <- lapply(Data$d, if(Data$c == 1){min(Data$b - Data$c, Data$a)} else 
{max(Data$b - Data$c, Data$a)})

但是条件不是基于单个单元格,而是整个列,我如何为特定行中的单元格获取此条件?

谢谢。

2 个答案:

答案 0 :(得分:2)

我们可以使用pmin/pmax进行矢量化处理,并使用ifelse而不是if/else

with(Data, ifelse(c == 1, pmin(b - c, a), pmax(b, a)))

请注意,对于“ no”表达式,我们不需要b-c,因为列的'c'为0

答案 1 :(得分:1)

我对R不太熟悉,但是这些情况通常需要“切换”。当有一个条件要评估,并且有两个或多个结果时,切换通常是做事的明确方法。

也许:

Output <- switch(Data$c, 
1 = min(Data$b - Data$c, Data$a),
0 = max(Data$b - Data$c, Data$a))

我喜欢开关,因为它可以非常清楚地说明发生了什么。另外,如果您需要添加“默认”或更多选项,则非常简单。

我不能保证那里的代码会工作,因为我不了解R,但这也许是朝着正确方向发展的推动力? :)