如何在R中使用“内”?

时间:2015-06-09 23:33:24

标签: r

我一直在努力寻找一种方法来评估从数据构建的环境中的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的新手,我想知道如何以正确的方式对其进行编码。任何帮助将不胜感激。

1 个答案:

答案 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)