2016-10-20 24 views
0

Я очень новичок в R, и я пытаюсь сопоставить определения словаря данных с набором данных, чтобы сделать более читаемый текст.Сопоставление данных в R с отсутствующими значениями

Например, на основе словаря данных в наборе данных Ames Iowa в настоящее время на Kaggle, я пытаюсь сопоставить зонирование домов.

mapping <- list(
    'A'='Agriculture', 
    'C (all)'='Commercial', 
    'FV'='Floating Village Residential', 
    'I'='Industrial', 
    'RH'='Residential High Density', 
    'RL'='Residential Low Density', 
    'RP'='Residential Low Density Park', 
    'RM'='Residential Medium Density' 
) 

housingData$MSZoning <- as.factor(as.character(mapping[origData$MSZoning])) 

Исходный набор данных не содержит значений для всех этих точек данных.

> table(origData$MSZoning) 

C (all)  FV  RH  RL  RM 
    10  65  16 1151  218 

После сопоставления с моим кодом пары значений ключа не выравниваются. (Например, сельское хозяйство сопоставляется с «С».) Я считаю, что пустые значения в исходных данных отбрасывают мое сопоставление.

> table(housingData$MSZoning, origData$MSZoning) 

           C (all) FV RH RL RM 
    Agriculture      10 0 0 0 0 
    Commercial       0 65 0 0 0 
    Floating Village Residential  0 0 16 0 0 
    Industrial       0 0 0 1151 0 
    Residential High Density   0 0 0 0 218 

Может ли кто-нибудь помочь с более подходящим способом обеспечения надлежащего соответствия этих ключей и значений?

Спасибо!

+0

Ничего себе, 4,5 года, и это ваш первый вопрос? Это впечатляет ... Серьезно, возможно, «recode» будет работать на вас? Кроме того, хотя у него есть некоторые преимущества, есть ли конкретная причина, по которой вы используете 'factor'? – r2evans

+0

Спасибо, r2evans. Я смог ответить на этот вопрос с вашей помощью. Что касается факторов, я скопировал код из серии «Отлично, хорошо, хорошо, плохо». Я согласен с тем, что эта реализация, возможно, не была наиболее подходящим использованием факторов. –

+0

(В дополнение к ответе на свой собственный вопрос, вы должны «принять» его, если вы не ожидаете, что кто-то еще предоставит ответ.) – r2evans

ответ

0

Спасибо за быстрый ответ. Я ценю это!

Используя команду recode, я смог сделать этот код соответствующим образом.

library(car) 

housingData$MSZoning <- recode(housingData$MSZoning, 
    "'A'='Agriculture'; 
    'C (all)'='Commercial'; 
    'FV'='Floating Village Residential'; 
    'I'='Industrial'; 
    'RH'='Residential High Density'; 
    'RL'='Residential Low Density'; 
    'RP'='Residential Low Density Park'; 
    'RM'='Residential Medium Density'" 
) 

Теперь, выполняя табличную перекрестную таблицу, я правильно вижу значения.

> table (housingData$MSZoning, origData$MSZoning) 

           C (all) FV RH RL RM 
    Commercial      10 0 0 0 0 
    Floating Village Residential  0 65 0 0 0 
    Residential High Density   0 0 16 0 0 
    Residential Low Density   0 0 0 1151 0 
    Residential Medium Density   0 0 0 0 218 

Еще раз спасибо!