2015-09-26 10 views
0

Я только во вводном классе R, поэтому это, вероятно, довольно просто.Как свернуть/перекодировать переменную в R

Я использую набор данных Outlook on Life и заинтересован в доходе. Респонденты должны были выбрать один из следующих 19 вариантов:

Less than $5,000  
$5,000 to $7,499  
$7,500 to $9,999  
$10,000 to $12,499 
$12,500 to $14,999 
$15,000 to $19,999 
$20,000to $24,999  
$25,000 to $29,999 
$30,000 to $34,999 
$35,000 to $39,999 
$40,000 to $49,999 
$50,000 to $59,999 
$60,000 to $74,999 
$75,000 to $84,999 
$85,000 to $99,999 
$100,000 to $124,999 
$125,000 to $149,999 
$150,000 to $174,999 
$175,000 or more 

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

  1. Под чертой бедности ($ 0 - 24999),
  2. Рабочий класс (25 000 $ - 34999),
  3. Низший средний класс ($ 35 000 - 60 000),
  4. среднего класса (60 000 $ - 100 000),
  5. Верхний средний класс (100 000 долларов США - 150 000),
  6. Топ 5 процентов (150 000 долларов США +).

Как бы я перекодировал это?

Спасибо!

+2

попробуйте функцию разреза – Chris

+4

Ваши интервалы проблематичны. Если бы кто-то сделал 22 000, они бы выбрали группу 7 (20k - 24,999). Вы хотели бы, чтобы они были в Under Boverty Line. Но кто-то, делающий 24k, также выбирает группу 7. Но они находятся в рабочем классе. Как вы узнаете разницу? –

+0

Да, это проблематично. Я мог бы массировать желаемые группы, чтобы они лучше соответствовали заранее установленным интервалам. Поэтому я могу сделать Under Boverty Line до 24,999. А затем рабочий класс 34999. – Katherine

ответ

2

Самый простой способ перекодировать факторы - понять, что функция levels может принимать список значений, которые можно использовать для переназначения ваших уровней факторов.

Я предположил, что ваши данные уже являются фактором (как вы сказали «Респондентам пришлось выбрать один из следующих 19 вариантов»), что означает, что на самом деле не имеет смысла использовать функцию cut.

Вот простой пример этого в действии:

z <- gl(3, 2, 12) # [1] 1 1 2 2 3 3 1 1 2 2 3 3, Levels: 1 2 3 
levels(z) <- list(A = c(1,3), B = 2) 
z # [1] A A B B A A A A B B A A, Levels: A B 

Как видно из приведенного выше примера, мы перекодировать уровни 1 и 3, чтобы быть группы А и 2-го уровня, чтобы быть группой B. Таким образом, ваш вопрос может быть выполнен аналогичным образом:

groups <- as.factor(sample(c("Less than $5,000", 
"$5,000 to $7,499", 
"$7,500 to $9,999", 
"$10,000 to $12,499", 
"$12,500 to $14,999", 
"$15,000 to $19,999", 
"$20,000to $24,999", 
"$25,000 to $29,999", 
"$30,000 to $34,999", 
"$35,000 to $39,999", 
"$40,000 to $49,999", 
"$50,000 to $59,999", 
"$60,000 to $74,999", 
"$75,000 to $84,999", 
"$85,000 to $99,999", 
"$100,000 to $124,999", 
"$125,000 to $149,999", 
"$150,000 to $174,999", 
"$175,000 or more"), size=100, replace=T)) 

levels(groups) <- list(
    "Under poverty line"=c("Less than $5,000", 
     "$5,000 to $7,499", 
     "$7,500 to $9,999", 
     "$10,000 to $12,499", 
     "$12,500 to $14,999", 
     "$15,000 to $19,999", 
     "$20,000to $24,999"), 
    "Working class"=c("$25,000 to $29,999", 
        "$30,000 to $34,999"), 
    "Lower middle class"=c("$35,000 to $39,999", 
         "$40,000 to $49,999", 
         "$50,000 to $59,999"), 
    "Middle class"=c("$60,000 to $74,999", 
        "$75,000 to $84,999", 
        "$85,000 to $99,999"), 
    "Upper middle class"=c("$100,000 to $124,999", 
         "$125,000 to $149,999"), 
    "Top 5 percent"=c("$150,000 to $174,999", 
        "$175,000 or more") 
)