Porque em vez de usar esse tipo escada de classificação você não usa um tipo suave? Para mim, este último faz mais sentido. Veja exemplo de como obter isso com a sua 'escada':

### Tabela da quinta aproximação
###     Nível de Fósforo mg/dm3
###Argila%    muito baixo         Baixo    Médio    Bom    Muito Bom
###60-100    <2.7(menor e igual)    2.8-5.4    5.5-8    8.1-12    >12
###35-60    <4                    4.1-8    8.1-12    12.1-18    >18
###15-35    <6.6                    6.7-12    12.1-20    20.1-30    >30
### 0-15    <10                    10.1-20    20.1-30    30.1-45    >45

escada <- function(x, y, x.br, y.br, ...) {
  ix <- findInterval(x, x.br, ...)+1
  lr <- lapply(1:nrow(y.br), function(j) {
    i <- which(ix==j)
    list(i=i, r=findInterval(y[i], y.br[j,], ...)+1)
  })
  i <- sort(unlist(lapply(lr, function(x) x$i)),
            index.return=TRUE, method='quick')$ix
  unlist(lapply(lr, function(x) x$r))[i]
}

### exemplo simulado
n <- 30000
x <- 90*runif(n)
y <- runif(n, 0, 100-x)*.7

cfosf <- rbind(c(10, 20, 30, 45), c(6.6, 12, 20, 30),
               c(4, 8, 12, 18), c(2.7, 5.4, 8, 12))
cfosf
res <- escada(x, y, c(15, 35, 60), cfosf)
table(res)

plot(x, y, col=res, pch=19, las=1, asp=1, cex=0.3,
     xlab="Argila", ylab="Fósforo")
abline(v=c(15, 35, 60), col=gray(.7))
for (j in 1:nrow(cfosf))
  segments(c(0, 15, 35, 60)[j], cfosf[j,],
           c(15, 35, 60, 100)[j], cfosf[j,], lty=3)
legend("topright", c("Muito baixo", "Baixo", "Médio", "Muito bom"),
       pch=19, col=1:5, bty='n', title='Textura')
segments(0,100,100,0, lty=3)

### usando esses dados simulados
### (ideal e' usar dados reais)
### para obter uma funcao suave

require(MASS)
aj <- polr(resp ~ x*y, data.frame(resp=factor(res, ordered=TRUE)))

prd <- predict(aj)

plot(x, y, col=unclass(prd), pch=19, las=1, asp=1, cex=0.3,
     xlab="Argila", ylab="Fósforo")
legend("topright", c("Muito baixo", "Baixo", "Médio", "Muito bom"),
       pch=19, col=1:5, bty='n', title='Textura')

### classificando um novo solo (Argila=36, fosforo=19)
### usando a escada:
escada(36, 19, c(15, 35, 60), cfosf)
### suave:
predict(aj, newdata=data.frame(x=36, y=19))


Att.
Elias.
 

Em 18/05/2013 09:28, Hélio Gallo Rocha < heliogallorocha@gmail.com > escreveu:
Bom dia a todos,
 
Para recomendar adubação fosfatada é necessário classificar a quantidade de fósforo da análise em conjunto a textura do solo.
 
 Tabela da quinta aproximação 

 

Nível de Fósforo mg/dm3

Argila%

muito baixo

Baixo

Médio

Bom

Muito Bom

60-100

<2.7 (menor e igual)

2.8-5.4

5.5-8

8.1-12

>12

35-60

<4

4.1-8

8.1-12

12.1-18

>18

15-35

<6.6

6.7-12

12.1-20

20.1-30

>30

0-15

<10

10.1-20

20.1-30

30.1-45

>45

 
 
 
Fiz o seguinte:
solo=c(1:50)                       # resultado da análise do solo
argila=c(60,35,15,0)            # teor de argila
p1=c(0,2.7,5.4,8,12)             # fósforo com + de 60% de argila
p2=c(0,4,8,12,18)                # fósforo com 35 a  60% de argila
p3=c(0,6.6,12,20,30)            # fósforo com 15 a  35% de argila
p4=c(0,10,20,30,45)            # fósforo com < 15% de argila
res=c("Muito.Baixo","Baixo", "Medio", "Alto", "Muito.alto")
 
Assim se o resultado de P é 3.5 :
60% de arg, seria classificado como Baixo
35% de arg. seria classificado como muito baixo
 
andei dando uma olhada na solução do post 

Uso do ifelse

 
A saida desta função seria casada com uma recomendação,
 
Grato a todos
 
--
Hélio Gallo Rocha
IFSULDEMINAS - Câmpus Muzambinho
 


_______________________________________________
R-br mailing list
R-br@listas.c3sl.ufpr.br
https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.