我一直在努力寻找一种方法来评估从数据构建的环境中的R表达式。我有一个数据框:
head(DATA1)
COD_CLI ENDEUD_FINAL
1 01002901 Mediana Empresa
2 01002932 No Sobreendeudado
3 04203409 No Sobreendeudado
...
我尝试完成另一个数据(DATA2):
head(DATA2)
COD_CLI_W ENDEUD_FINAL
1 01002190
2 01002913
3 04203401
...
DATA2大于DATA1,如果两个数据中的COD_CLI / COD_CLI_W相同,我取DATA1的第二列,如果不是,我必须评估另一个数据帧“钱包”:
> str(wallet)
'data.frame': 81101 obs. of 8 variables:
$ COD_CREDITO : chr "0040410166104" "00000363393" "0060030164135" "004023854M" ...
$ COD_CLI : chr "00402037" "00166750" "00178607" "40097700" ...
$ TIPO_DE_CREDITO : chr "12.-CONSUMO NO REVOLVENTE" "10.-MICROEMPRESA" "10.-MICROEMPRESA" "10.-MICROEMPRESA" ...
$ SITUACION_SAFI : chr "CASTIGADO" "CASTIGADO" "CASTIGADO" "CASTIGADO" ...
$ COD_TIP_PRESTAMO: chr "0747" "0748" "0748" "0747" ...
$ ATR_SOL : num 0 0 0 0 0 0 0 0 0 0 ...
$ CAP_SOL : num 313.37 3.16 1670.51 3010 2327.71 ...
$ NUM_ENT : num 3 1 2 1 1 3 2 1 4 2 ...
现在我运行的代码是:
DATA2 <- within(DATA2,{
CALIF_RCD <- ifelse(COD_CLI_W %in% DATA1$COD_CLI,DATA1$ENDEUD_FINAL[which(DATA1$COD_CLI %in% COD_CLI_W)],
ifelse(wallet$TIPO_DE_CREDITO[which(wallet$COD_CLI %in% COD_CLI_W)[1]] == "08.-MEDIANA EMPRESA","Mediana Empresa",
ifelse(wallet$NUM_ENT[which(wallet$COD_CLI %in% COD_CLI_W)[1]]<5,"No Sobreendeudado","Sobreendeudado")))
}
)
在大多数情况下输出是错误的。我是R的新手,我想知道如何以正确的方式对其进行编码。任何帮助将不胜感激。
答案 0 :(得分:0)
我采用了第一种方法&#34; merge&#34;:
DATA3 <- merge(DATA1, DATA2, by.x = "COD_CLI", by.y = "COD_CLI_W", all.y=TRUE)
DATA3 <- DATA3[!complete.cases(DATA3),]
之后,我分析了DATA3中的左外侧:
w = NULL
for(i in 1:length(DATA3$ENDEUD_FINAL))
{
w = which(wallet$COD_CLI %in% DATA3$COD_CLI[i])[1]
DATA3$ENDEUD_FINAL[i] <- ifelse(wallet$TIPO_DE_CREDITO[w] == "08.-MEDIANA EMPRESA","Mediana Empresa",
ifelse(wallet$NUM_ENT[w]<5,"No Sobreendeudado","Sobreendeudado"
))
}
最后&#34; rbind&#34; DATA1和DATA2:
DATA2 <- rbind(DATA1, DATA3)