Преобразование фрейма данных (факторов) с помощью data.matrix, странные результаты - PullRequest
2 голосов
/ 26 февраля 2012

Я не понимаю результат data.matrix в моем фрейме данных.Цель состоит в том, чтобы составить график результатов.Данные:

> tab.c.graph
    BacD BacE BacF
J01    2    6   10
J02    2    2    0
J03    9    4    6
J04    1    7    3
J05   11   10    2
J06    9    7    7
J07    8    3    0
J08    6    2    1
J09    4    3    2
J10    4    4    1
> str(tab.c.graph)
'data.frame':   10 obs. of  3 variables:
 $ BacD: Factor w/ 8 levels "1","11","2"," 2",..: 4 3 8 1 2 8 7 6 5 5
  ..- attr(*, "names")= chr  "J01" "J02" "J03" "J04" ...
 $ BacE: Factor w/ 6 levels "10","2","3","4",..: 5 2 4 6 1 6 3 2 3 4
  ..- attr(*, "names")= chr  "J01" "J02" "J03" "J04" ...
 $ BacF: Factor w/ 8 levels "0","1","10","2",..: 3 1 7 6 5 8 1 2 4 2
  ..- attr(*, "names")= chr  "J01" "J02" "J03" "J04" ...

> data.matrix(tab.c.graph)
    BacD BacE BacF
J01    4    5    3
J02    3    2    1
J03    8    4    7
J04    1    6    6
J05    2    1    5
J06    8    6    8
J07    7    3    1
J08    6    2    2
J09    5    3    4
J10    5    4    2

> str(data.matrix(tab.c.graph))
 int [1:10, 1:3] 4 3 8 1 2 8 7 6 5 5 ...
 - attr(*, "dimnames")=List of 2
  ..$ : chr [1:10] "J01" "J02" "J03" "J04" ...
  ..$ : chr [1:3] "BacD" "BacE" "BacF"

Почему data.matrix так сильно отличается от моего data.frame?Как уже упоминалось выше, мне просто нужно построить эти данные.

Спасибо за помощь!

1 Ответ

4 голосов
/ 26 февраля 2012

Чтобы увидеть, что произошло, посмотрите на следующий пример:

> (f <- gl(2, 1, 10, labels=3:4))
 [1] 3 4 3 4 3 4 3 4 3 4
Levels: 3 4
> as.numeric(f)
 [1] 1 2 1 2 1 2 1 2 1 2
> as.numeric(as.character(f))
 [1] 3 4 3 4 3 4 3 4 3 4

Чтобы преобразовать фактор (что у вас есть в data.frame) в numericvector, сохраняя при этом метки (иначе вы просто получите его уровни ), вам нужно что-то вроде as.numeric(as.character()).

Итак, либо убедитесь, что вы правильно прочитали свои входные данные (если числа указаны в кавычках, если для options("stringsAsFactors") установлено значение ИСТИНА, то, скорее всего, они будут преобразованы в коэффициент), либо впоследствии преобразуйте ваш data.frame,Это можно сделать по столбцам, например:

dfrm <- data.frame(x=factor(c(3,2,1,8,4)), y=factor(c(5,6,1,2,3)))
m <- sapply(dfrm, function(x) as.numeric(as.character(x)))
plot(m)

Я неправильно прочитал ваш вопрос, и я подумал, что вы используете as.matrix, а не data.matrix.Это ничего не меняет, поскольку обе функции преобразуют факторы в их внутреннее представление, как указано в интерактивной справке:

Факторы и упорядоченные факторы заменяются их внутренними кодами.

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