Как преобразовать кадр данных в основном факторов в числовую матрицу; удаление не работает

У меня возникли проблемы с преобразованием моего data.frame в матричный формат. Поскольку я хотел изменить свой data.frame с главным образом факторными переменными в числовую матрицу, я использовал следующий код

UN2010frame <- data.matrix(lapply(UN2010, as.numeric))

Однако, когда я проверил режим UN2010frame, он все еще отображался в виде списка. Поскольку код, который я хочу запустить (Ордрейтинг), не принимает данные в формате списка, я использовал UN2010matrix <- unlist(UN2010frame), чтобы удалить свою матрицу из списка. Когда я сделал это, моя первая строка (которая раньше была строкой с именами столбцов) превратилась в NA. Для меня это было проблемой, потому что, когда я попытался запустить порядковую модель IRT, используя этот набор данных, я получил следующее сообщение об ошибке.

> Error in 1:nrow(Y) : argument of
> length 0

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

Если бы вы могли помочь мне на любом фронте, это было бы глубоко признательно. Большое спасибо!

Хейли


person Haillie    schedule 20.04.2011    source источник
comment
Не могли бы вы предоставить небольшой образец UN2010, чтобы мы могли попытаться воспроизвести ваши результаты?   -  person Joshua Ulrich    schedule 20.04.2011
comment
Почему ты просто не делаешь data.matrix(UN2010) ? data.matrix сначала преобразует все столбцы в числовые, а затем привязывает их. Так что вся эта лаппи совершенно не нужна. Более того, он ломает ваш код, так как возвращает список.   -  person Joris Meys    schedule 20.04.2011


Ответы (2)


Во-первых, правильное использование data.matrix:

data.matrix(UN2010)

поскольку он автоматически преобразуется в числовой. lapply в вашем коде является первым источником ошибки, которую вы получаете. Вы помещаете список в функцию data.matrix, а не в фрейм данных. Таким образом, он возвращает список матриц, а не матрицу.

Во-вторых, unlist возвращает вектор, а не матрицу. Так что вы наверняка не найдете «первую строку с NA», так как у вас есть вектор. Что может частично объяснить ваше замешательство.

Вероятно, у вас где-то есть столбец символов. Преобразование этого в числовое дает NA. Если вы этого не хотите, то исключите их из дальнейшего анализа. Одна из возможностей — использовать colwise() из пакета plyr для преобразования только коэффициентов:

colwise(as.numeric,is.factor)(UN2010)

Который возвращает кадр данных только с факторами. Это можно легко преобразовать с помощью data.matrix() или as.matrix(). В качестве альтернативы вы можете использовать базовое решение:

id <- sapply(UN2010,is.character)
sapply(UN2010[!id],as.numeric)

который вернет вам матрицу со всеми несимвольными столбцами, преобразованными в числовые. Если вы действительно хотите сохранить фрейм данных со всеми исходными столбцами, вы можете сделать:

UN2010frame <- UN2010
UN2010frame[!id] <- lapply(UN2010[!id],as.numeric)

Пример кода игрушки:

UN2010 <- data.frame(
  F1 = factor(rep(letters[1:3],10)),
  F2 = factor(rep(letters[5:10],5)),
  Char = rep(letters[11:16],each=5),
  Num = 1:30,
  stringsAsFactors=FALSE
)
person Joris Meys    schedule 20.04.2011

Попробуйте as.data.frame вместо data.matrix.

person Richie Cotton    schedule 20.04.2011