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> 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