2014-07-18 2 views
0

Я имею дело с предикторами, которые я хотел бы рассматривать как факторы. К сожалению, данные, представляющие ответы на вопросы с множественным выбором, хранятся как целые числа, поэтому, когда я вписываюсь в линейную модель, R рассматривает их как числовые предиктора, а не факторы. Я не хочу вводить factor(x) каждый раз; как я буду автоматически кодировать предиктора как факторные переменные?Как автоматически кодировать целочисленные переменные в качестве факторов?

Пример данных, которые я мог бы иметь:

a b response 
1 1 T 6.946486 
2 2 F 1.952378 
3 3 T 5.189918 
4 1 T 2.680438 
5 2 F 2.243461 
6 3 T 5.398814 
7 1 T 2.375182 
8 2 F 0.376323 
9 3 T 5.144803 

Желаемая задача: R сказать, без необходимости вводить lm(response ~ factor(a) + b), что Предиктор a следует рассматривать в качестве переменной фактора. Может быть, мне нужно пройти через каждый столбец и сохранить как фактор, а затем перейти к lm? Может быть, я могу перейти на lm? Попробуйте разные вещи ...

+0

'data $ a <- as.factor (data $ a); lm (response ~ a + b, data = data) '? ..., который на самом деле больше печатает, и теперь вы изменили весь набор данных. почему ты хочешь сделать это? –

ответ

2

Может быть проще всего преобразовать все ответы на вопросы с несколькими вариантами выбора (MCQ) в факторы перед передачей фрейма данных на lm. Если предположить, что все целочисленные переменные MSQ ответы, вы можете использовать is.integer и sapply:

## making up data 
N <- 20 
d <- data.frame(a = sample(3, N, replace=TRUE), 
       b = sample(3, N, replace=TRUE), 
       c = sample(3, N, replace=TRUE), 
       d = sample(c(TRUE, FALSE), 10, replace=TRUE), 
       e = sample(c(TRUE, FALSE), 10, replace=TRUE), 
       f = sample(3, N, replace=TRUE), 
       response = rnorm(20, 0, 2)) 

## determine which columns are integer 
int_col <- which(sapply(d, is.integer)) 

## convert all integer variables to factor variables 
d[, int_col] <- lapply(d[int_col], factor) # sapply doesn't work here 
str(d) 

Если у вас есть целые переменные, которые не MSQ ответы, то вам придется изменить int_col вручную, за исключением тех переменных.

 Смежные вопросы

  • Нет связанных вопросов^_^