Eu tenho um quadro de dados como este:
df
VALUE ABS_CALL DETECTION P-VALUE
1007_s_at "957.729231881542" "P" "0.00486279317241156"
1053_at "320.632701283368" "P" "0.0313356324173416"
117_at "429.842323161046" "P" "0.0170004527476119"
121_at "2395.7364289242" "P" "0.0114473584876183"
1255_g_at "116.493632746934" "A" "0.39799368200131"
1294_at "739.927122116896" "A" "0.0668649772942343"
Quero converter os nomes das linhas na primeira coluna. Atualmente, uso algo assim para criar nomes de linhas como a primeira coluna:
d <- df
names <- rownames(d)
rownames(d) <- NULL
data <- cbind(names,d)
Existe uma única linha para fazer isso?
d <- cbind(rownames(d), data.frame(d, row.names=NULL))
Respostas:
Você pode ambos os nomes de linha remover e convertê-los em uma coluna por referência (sem realocação de memória usando
->
) usandosetDT
e seukeep.rownames = TRUE
argumento dodata.table
pacoteComo mencionado por @snoram, você pode dar à nova coluna o nome que quiser, por exemplo
setDT(df, keep.rownames = "newname")
, adicionaria "newname" como a coluna de linhas.fonte
colnames(df)[1] <- "newname"
para renomear a primeira coluna, se necessário.setnames(df, 1, "newname")
é odata.table
caminho.setDT(df, keep.rownames = "newname")[]
as.data.table()
: Se TRUE, adiciona os nomes do objeto de entrada como uma coluna separada chamada "rn". keep.rownames = "id" nomeia a coluna "id" em vez dissoOu você pode usar
dplyr
oadd_rownames
que faz a mesma coisa que a resposta de David:UPDATE (meados de 2016): (incorporado ao acima)
a função antiga chamada
add_rownames()
foi preterida e está sendo substituída portibble::rownames_to_column()
(mesmas funções, mas Hadley refatoroudplyr
um pouco).fonte
Uma opção de uma linha é:
fonte
rownames
como uma coluna no final, e não como uma primeira coluna.Como alternativa, você pode criar um novo quadro de dados (ou substituir o atual, como no exemplo abaixo), para não precisar usar nenhum pacote externo. No entanto, esse caminho pode não ser eficiente com grandes quadros de dados.
fonte
df <- cbind(names = rownames(df), df)
Movi meu comentário para uma resposta por sugestão acima:
Você não precisa de pacotes extras, aqui está uma lista:
fonte
dplyr::as_data_frame(df, rownames = "your_row_name")
lhe dará um resultado ainda mais simples.fonte
Ou usando
DBI
ssqlRownamesToColumn
fonte