2015-06-09 2 views
0

Я изо всех сил пытался найти способ оценки выражения R в среде, построенной из данных. У меня есть dataframe:Как использовать «внутри» в 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 в обоих DATAS, я беру второй столбец DATA1, если не я должен оценить другой dataframe «бумажник»:

> 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

звучит так, будто вы можете просто «слить» вместо написания вложенных 'ifelse' – rawr

+0

Я попытался это сделать, но я не знаю, прямо. DATA2 содержит всю информацию DATA1 и больше. Я бы оценил элементы, которые находятся только в DATA2, но я не знаю, как создать это подмножество с помощью «merge» или любого другого метода. – JVALLEJO

ответ

0

Я принял первый подход с использованием "объединить":

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" 
     )) 
    } 

и, наконец, "rbind" data1 и data2:

 DATA2 <- rbind(DATA1, DATA3) 
Смежные вопросы