Mudar o nome de linhas e colunas em R
Pergunta
Estou executando o seguinte script:
cause = c(1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 2);
time = c(1, 1, 2, 3, 3, 2, 2, 1, 1, 2, 2);
table(cause, time)
E eu recebo o seguinte:
time
cause 1 2 3
1 2 2 2
2 2 3 0
O que eu quero é o seguinte:
time
cause 1 2 3
Maltreat 2 2 2
Non-Maltr 2 3 0
Então, minha pergunta é: como é que você renomear as linhas de uma tabela em R
Na mesma linha, como você renomear as colunas dessa tabela?
Solução
Uma maneira de fazer isso é usar fatores ou listas de strings em vez de índices. Assim:
cause1 <- c("Maltreat", "Non-malt")[cause]
> print(cause1)
[1] "Maltreat" "Maltreat" "Maltreat" "Maltreat" "Maltreat" "Non-malt"
[7] "Maltreat" "Non-malt" "Non-malt" "Non-malt" "Non-malt"
> table(cause1, time)
time
cause1 1 2 3
Maltreat 2 2 2
Non-malt 2 3 0
E, no caso de você está preocupado com a memória ou a velocidade, R é bom bastante em representar esse tipo de coisa de forma eficiente internamente, com apenas uma única instância de toda a cadeia armazenada, eo resto feito com índices.
A propósito, você será mais feliz no longo prazo com quadros de dados:
> df <- data.frame(cause=as.factor(c("Maltreat", "Non-malt")[cause]), time=time)
> summary(df)
cause time
Maltreat:6 Min. :1.000
Non-malt:5 1st Qu.:1.000
Median :2.000
Mean :1.818
3rd Qu.:2.000
Max. :3.000
> table(df)
time
cause 1 2 3
Maltreat 2 2 2
Non-malt 2 3 0
Outras dicas
Existem duas maneiras fáceis de fazer isso:
z <- table(cause, time)
Use o COLNAMES / rownames funções:
> colnames(z)
[1] "1" "2" "3"
> rownames(z)
[1] "1" "2"
ou uso dimnames:
> dimnames(z)
$cause
[1] "1" "2"
$time
[1] "1" "2" "3"
> dimnames(z)$cause
[1] "1" "2"
Em qualquer caso, escolher seus nomes como um vector e atribuí-los:
> dimnames(z)$cause <- c("Maltreat","Non-malt")
> z
time
cause 1 2 3
Maltreat 2 2 2
Non-malt 2 3 0
Não se esqueça maravilhosa "revalorização" do plyr e comando "renomeação"!