Je rencontre un problème avec une tâche particulière de mon code. J'ai une trame de données commesous-ensemble de trame de données en fonction de plusieurs conditions
n <- 6
set.seed(123)
df <- data.frame(x=paste0("x",seq_along(1:n)), A=sample(c(-2:2),n,replace=TRUE), B=sample(c(-1:3),n,replace=TRUE))
#
# x A B
# 1 x1 -1 1
# 2 x2 1 3
# 3 x3 0 1
# 4 x4 2 1
# 5 x5 2 3
# 6 x6 -2 1
et un arbre de décision
A>0;Y;Y;N;N
B>1;Y;N;Y;N
C;1;2;2;1
que je charge par
dt <- read.csv2("tmp.csv", header=FALSE)
Je voudrais créer une boucle pour toutes les combinaisons possibles de (A> 0) et (B> 1) et définissez la valeur C sur la colonne x du sous-ensemble qui satisfait cette condition. Alors, voici ce que je l'ai fait
nr <- 3
nc <- 5
cond <- dt[1:(nr-1),1,drop=FALSE]
rule <- dt[nr,1,drop=FALSE]
subdf <- vector(mode="list",2^(nr-1))
for (i in 2:nc) {
check <- paste0("")
for (j in 1:(nr-1)) {
case <- paste0(dt[j,1])
if (dt[j,i]=="N")
case <- paste0("!",case)
check <- paste0(check, "(", case, ")")
if (j<(nr-1))
check <- paste0(check, "&")
}
subdf[i] <- subset(df,check)
subdf[i]$C <- dt[nr,i]
}
unlist(subdf)
malheureusement, je suis une erreur en utilisant comme sous-ensemble de cela, il ne peut pas analyser les conditions de mes instructions de chaîne. que devrais-je faire?
Le problème sera-t-il plus important que cela, ou vérifiez-vous seulement a et b? – Heroka
Oui, le problème est plus grand que cela, mais je voulais le simplifier et le généraliser pour d'autres personnes. était-ce mal? – Stefano
Je vérifiais juste. Vous n'avez pas du tout tort (vous avez raison), donc une solution devrait être généralisable à un nombre arbitraire de règles. – Heroka