Объедините несколько категориальных переменных в одну фиктивную переменную - PullRequest
6 голосов
/ 07 декабря 2011

У меня есть 3 категориальные переменные

agegroup{<20,20-30,>03}    
disease.level{0,1,2},  
performance{<60, >=60}

и я хотел бы объединить их в одну фиктивную переменную с уровнями 3x3x2. Есть ли быстрый способ сделать это? Мои оригинальные наборы данных содержат около 10 переменных с несколькими уровнями в каждом.

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

Большое спасибо EC

1 Ответ

6 голосов
/ 07 декабря 2011

Я не уверен, что под "фиктивной переменной" вы хотите использовать переменные индикатора 0/1 (в которых у вас будет 18 фиктивных переменных), или вы хотите один фактор с 18 уровнями.Похоже, последний.(На самом деле, paste будет работать так же хорошо, как и interaction, хотя interaction немного более самоописательно.)

> ff <- expand.grid(agegroup=factor(c("<20","20-30",">30")),
       disease.level=factor(0:2),performance=factor(c("<60",">=60")))
> combfac <- with(ff,interaction(agegroup,disease.level,performance))
> combfac
 [1] <20.0.<60    20-30.0.<60  >30.0.<60    <20.1.<60    20-30.1.<60 
 [6] >30.1.<60    <20.2.<60    20-30.2.<60  >30.2.<60    <20.0.>=60  
[11] 20-30.0.>=60 >30.0.>=60   <20.1.>=60   20-30.1.>=60 >30.1.>=60  
[16] <20.2.>=60   20-30.2.>=60 >30.2.>=60  
18 Levels: <20.0.<60 20-30.0.<60 >30.0.<60 <20.1.<60 20-30.1.<60 ... >30.2.>=60

Если вы хотите использовать все ,переменные во фрейме данных, чтобы создать взаимодействие, вы можете использовать do.call(interaction,ff).

Если вы хотите, чтобы фиктивные переменные вы сделали model.matrix(~combfac-1), чтобы получить их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...