Как конвертировать данные из большинства факторов в числовую матрицу; unlist не работает - PullRequest
3 голосов
/ 20 апреля 2011

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

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

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

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

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

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

Хейли

Ответы [ 2 ]

1 голос
/ 20 апреля 2011

Во-первых, правильное использование 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
)
0 голосов
/ 20 апреля 2011

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

...