Как аккуратно представить вывод различных комбинаций двух факторов в таблице в r? - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть набор данных с 3 столбцами. Первые два столбца имеют следующие входные значения из эксперимента и являются факторами:

col1=[5,  5,  7,  5, 12,  7,  9,  9, 12, 12,  9,  7] 
col2=[3.0, 0.5, 1.0, 1.0, 0.5, 0.5, 1.0, 0.5, 1.0, 3.0, 3.0, 3.0]

Третий столбец в результате этих комбинаций:

col3=[1.435078, 1.161110, 3.012732, 1.341047, 1.299615, 2.718960, 3.913285, 2.064090, 1.261958, 1.158850, 3.079639, 2.579303]

Все, что я хочу, это представить данные с отдельными значениями column2 слева от таблицы и значениями столбца 1 над таблицей, а значения столбца 3, относящиеся к каждой уникальной комбинации факторов, показаны на пересечении обоих факторов , В идеале это будет выглядеть примерно так:

|     | 5    | 7    | 9    | 12   |
|-----|------|------|------|------|
| 0.5 | 1.16 | 2.72 | 3.91 | 1.30 |
| 1.0 | 1.34 | 3.01 | 2.06 | 1.26 |
| 3.0 | 1.43 | 2.58 | 3.08 | 1.16 |

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

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Используя dplyr и knitr:

df %>%
  spread(col1, col3) %>%
  kable()

| col2|        5|        7|        9|       12|
|----:|--------:|--------:|--------:|--------:|
|  0.5| 1.161110| 2.718960| 2.064090| 1.299615|
|  1.0| 1.341047| 3.012732| 3.913285| 1.261958|
|  3.0| 1.435078| 2.579303| 3.079639| 1.158850|

Или просто используя dplyr:

df %>% 
  spread(col1, col3)

  col2        5        7        9       12
1  0.5 1.161110 2.718960 2.064090 1.299615
2  1.0 1.341047 3.012732 3.913285 1.261958
3  3.0 1.435078 2.579303 3.079639 1.158850

Или используя reshape2:

dcast(df, col2 ~ col1, value.var = "col3") 

  col2        5        7        9       12
1  0.5 1.161110 2.718960 2.064090 1.299615
2  1.0 1.341047 3.012732 3.913285 1.261958
3  3.0 1.435078 2.579303 3.079639 1.158850

Данные:

df <- as.data.frame(cbind(col1 = c(5,  5,  7,  5, 12,  7,  9,  9, 12, 12,  9,  7),
col2 = c(3.0, 0.5, 1.0, 1.0, 0.5, 0.5, 1.0, 0.5, 1.0, 3.0, 3.0, 3.0),
col3 = c(1.435078, 1.161110, 3.012732, 1.341047, 1.299615, 2.718960, 3.913285, 2.064090, 1.261958, 1.158850, 3.079639, 2.579303)))
0 голосов
/ 17 сентября 2018

Использование xtabs:

xt <- xtabs(col3 ~ col2 + col1)

дает:

> xt
     col1
col2         5        7        9       12
  0.5 1.161110 2.718960 2.064090 1.299615
  1   1.341047 3.012732 3.913285 1.261958
  3   1.435078 2.579303 3.079639 1.158850

или используйте ftable(xt), чтобы получить немного другой результат.

tapply также будет работать в качестве альтернативы xtabs:

tapply(col3, data.frame(col2, col1), c)

Если вы хотите разбить клетки, попробуйте:

library(Hmisc)
print.char.matrix(xt, col.names = TRUE)

дает:

+----+--------+--------+--------+--------+
|col2|    5   |    7   |    9   |   12   |
+----+--------+--------+--------+--------+
| 0.5| 1.16111| 2.71896| 2.06409|1.299615|
+----+--------+--------+--------+--------+
|   1|1.341047|3.012732|3.913285|1.261958|
+----+--------+--------+--------+--------+
|   3|1.435078|2.579303|3.079639| 1.15885|
+----+--------+--------+--------+--------+

Примечание

Вход в воспроизводимой форме:

col1 <- c(5,  5,  7,  5, 12,  7,  9,  9, 12, 12,  9,  7)
col2 <- c(3.0, 0.5, 1.0, 1.0, 0.5, 0.5, 1.0, 0.5, 1.0, 3.0, 3.0, 3.0)
col3 <- c(1.435078, 1.161110, 3.012732, 1.341047, 1.299615, 2.718960, 3.913285, 
  2.064090, 1.261958, 1.158850, 3.079639, 2.579303)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...