具有多列的函数以获得一个输出

时间:2014-10-29 07:24:27

标签: r function

我想编写一个函数,根据三列中的值将每一行分类为穷,中或好

以下是示例数据

C = c(1, 0.4, 3, 6, 2)
N = c(0.1, 3, 5, 7, 13)
P = c(2, 3, 3, 4, 2)

mydf = data.frame(C,N,P)

假设我想用C<所有东西进行分类。无论N还是P,0.5都是差的。同样,对于N的所有值, 10

C的任何值使得1 <1。 C&lt; 4,和P使得1 <1。 P&lt; 4被列为好

其他所有内容都归类为中等

目前我使用了几个if函数,一次检查每个条件,然后是最终函数,看看所有必需条件是否良好,然后最终分类是好的,如果有任何差的那么差,否则平台。

相反,我想在一个函数中完成所有操作,因为我必须将它扩展到更多条件(20+)。我尝试过使用ifelse函数,但我无法弄明白

如果有任何好的资料来源阅读这些功能,我感谢任何输入,谢谢

1 个答案:

答案 0 :(得分:0)

尝试:

> mydf$result = with(mydf, ifelse(C<0.5 | N>10, 'poor',ifelse(C<4 & C>1 & P>1 & P<4, 'good', 'medium')))
> 
> mydf
    C    N P result
1 1.0  0.1 2 medium
2 0.4  3.0 3   poor
3 3.0  5.0 3   good
4 6.0  7.0 4 medium
5 2.0 13.0 2   poor

创建一个功能:

myfn = function(ddf){
    ddf$res = with(ddf, ifelse(C<0.5 | N>10, 'poor',ifelse(C<4 & C>1 & P>1 & P<4, 'good', 'medium')))
    ddf
}

反复写ifelse:

ddf$res = with(ddf, ifelse(C<0.5 | N>10, 'poor',
                    ifelse(C<4 & C>1 & P>1 & P<4, 'good', 
                        'medium'
                    ))  # number of these closing brackets should be same as number of 'ifelse'
                    )  # this closing bracket is for 'with' function