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

R 函数具有多个列以获得一个输出,r,function,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) 假设我想把所有C10的值 任何C值(11&P1&P对OP的说明:既然您提到您有20+个条件,请注意,将20+ifelses嵌套到彼此中可能会导致计算效率不高。不幸的是,我现在无法告诉您更好的选择。如果您只有很少的嵌套级别,如@rnso的答

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

下面是示例数据

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<0.5的东西归类为差,不管N或p。同样,对于所有N>10的值

任何C值(1 其他的都归为中等

目前,我使用了几个if函数,每次检查每个条件,然后使用最终函数查看所有必需条件是否良好,然后最终分类是否良好,如果有任何条件较差,则其较差,否则为中等

相反,我想在一个函数中实现这一切,因为我必须将它扩展到更多的条件(20+)。我已经尝试过使用ifelse函数,但我真的无法理解它

如果有任何关于这些功能的好资料可以阅读,我非常感谢您的意见,谢谢您尝试:

> 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
>mydf$result=with(mydf,ifelse)(C10,'poor',ifelse(C1&P>1&P
>mydf
C N P结果
1 1.0 0.1 2中等
2 0.4 3.0 3差
3.0 5.0 3良好
4.6.0 7.0 4中等
5 2.0 13.0 2差
要创建函数,请执行以下操作:

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
}
myfn=函数(ddf){

ddf$res=带(ddf,ifelse)(C10,'差',ifelse(C1&P>1&P1&P对OP的说明:既然您提到您有20+个条件,请注意,将20+
ifelse
s嵌套到彼此中可能会导致计算效率不高。不幸的是,我现在无法告诉您更好的选择。如果您只有很少的嵌套级别,如@rnso的答案中所述,那么应该是这样的很好,效率很高。我很想运行一系列的子集操作,例如,
medgood0.5]
,然后‘good=1&max(medgood[,c('c','P'))首先要做的事情是:弄清楚为什么你认为你需要应用二十个独立的(独立的)你的数据的边界。我有点怀疑你是否有那么多硬限制,而不是统计概率尾部。接下来,看看你是否能想出一个公式(方程),将
C,N,P,
作为输入,其输出表示“好/中/差”状态。可能性包括聚类和加权和或乘积。
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