我有这个矩阵:
quimio = matrix(c(51,33,16,58,29,13,48,42,30,26,38,16),
nrow = 4, ncol = 3)
colnames(quimio) = c("Pouca", "Média", "Alta")
rownames(quimio) = c("Tipo I", "Tipo II", "Tipo III", "Tipo IV")
看起来像这样:
Pouca Média Alta
Tipo I 51 29 30
Tipo II 33 13 26
Tipo III 16 48 38
Tipo IV 58 42 16
我想把它变成一个tibble,这些行和列名都是虚拟变量 .
我想制作一个条形图并得到这个:
library(tidyverse)
tipo = c("Tipo I", "Tipo II", "Tipo III", "Tipo IV")
tipos = rep(tipo, 3)
quimiotb = as.tibble(quimio)
quimiotb = gather(quimiotb)
quimiotb$tipo = tipos
quimiotb = rename(quimiotb, reacao = key)
quimiotb$reacao = factor(quimiotb$reacao)
quimiotb$tipo = factor(quimiotb$tipo)
这就是我得到的:
A tibble: 12 x 3
reacao value tipo
<fct> <dbl> <fct>
1 Pouca 51 Tipo I
2 Pouca 33 Tipo II
3 Pouca 16 Tipo III
4 Pouca 58 Tipo IV
5 Média 29 Tipo I
6 Média 13 Tipo II
7 Média 48 Tipo III
8 Média 42 Tipo IV
9 Alta 30 Tipo I
10 Alta 26 Tipo II
11 Alta 38 Tipo III
12 Alta 16 Tipo IV
虽然这对于使用 ggplot2
的条形图是非常好的,但是我无法在其上运行任何模型 - 这需要 tipo
扩展到4列并且 reacao
在3中 . 现在这个tibble的第一行读起来像“51个病人”与Tipo I癌症有pouca reacao“ . 我已经考虑过使用 spread()
但是找不到正确的参数组合 . 任何帮助,将不胜感激 .
TL;博士
我需要整理 quimiotb
并且不知道如何
编辑:预期的输出应该是这样的
A tibble: Y x 7
Pouca Media Alta Tipo I Tipo II Tipo III Tipo IV
<fct> <fct> <fct> <fct> <fct> <fct> <fct>
1 0 1 0 0 1 0 0
2 1 0 0 1 0 0 0
3 回答
建模例程将在内部为您创建一个model.matrix而无需指定它,因此这应该足够了 .
model.matrix
可以从中创建一个模型矩阵,但您不需要它,如下面的代码所示 .现在你做的事情如下:
或者查看
summary(fm1)
输出中Var2
系数的t检验,看它们是否与零显着不同 .或者您可能想对原始数据进行卡方检验
无论如何,R中有许多建模功能,您现在可以获得所需形式的数据,并可以探索它们 .
另一种选择是
这里
fun
为quimio
的某对行和列创建了一个包含两列的tibble,其中行数作为quimio
中的条目给出 . 第二行遍历所有列和行对,为每个列创建一个tibble,绑定它们,并将所有剩余的NA
条目设置为零 .不如我想要的优雅,但应该与
data.table
和mltools
一起使用:代码