我有一个问题,关于在使用条件的情况下使用多个功能。 这是数据帧
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)})
但是条件不是基于单个单元格,而是整个列,我如何为特定行中的单元格获取此条件?
谢谢。
答案 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,但这也许是朝着正确方向发展的推动力? :)