Convert row names into first column

点点圈 提交于 2019-11-26 02:18:56

问题


I have a data frame like this:

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\" 

I want to convert the row names into the first column. Currently I use something like this to make row names as the first column:

  d <- df
  names <- rownames(d)
  rownames(d) <- NULL
  data <- cbind(names,d)

Is there a single line to do this?


回答1:


You can both remove row names and convert them to a column by reference (without reallocating memory using ->) using setDT and its keep.rownames = TRUE argument from the data.table package

library(data.table)
setDT(df, keep.rownames = TRUE)[]
#    rn     VALUE  ABS_CALL DETECTION     P.VALUE
# 1:  1 1007_s_at  957.7292         P 0.004862793
# 2:  2   1053_at  320.6327         P 0.031335632
# 3:  3    117_at  429.8423         P 0.017000453
# 4:  4    121_at 2395.7364         P 0.011447358
# 5:  5 1255_g_at  116.4936         A 0.397993682
# 6:  6   1294_at  739.9271         A 0.066864977

As mentioned by @snoram, you can give the new column any name you want, e.g. setDT(df, keep.rownames = "newname") would add "newname" as the rows column.




回答2:


Or you can use dplyr's add_rownames which does the same thing as David's answer:

library(dplyr)
df <- tibble::rownames_to_column(df, "VALUE")

UPDATE (mid-2016): (incorporated to the above)

old function called add_rownames() has been deprecated and is being replaced by tibble::rownames_to_column() (same functions, but Hadley refactored dplyr a bit).




回答3:


A one line option is :

df$names <- rownames(df)



回答4:


Alternatively, you can create a new dataframe (or overwrite the current one, as the example below) so you do not need to use of any external package. However this way may not be efficient with huge dataframes.

df <- data.frame(names = row.names(df), df)



回答5:


Moved my comment into an answer per suggestion above:

You don't need extra packages, here's a one-liner:

d <- cbind(rownames(d), data.frame(d, row.names=NULL))



回答6:


dplyr::as_data_frame(df, rownames = "your_row_name") will give you even simpler result.




回答7:


Or by using DBIs sqlRownamesToColumn

library(DBI) sqlRownamesToColumn(df)



来源:https://stackoverflow.com/questions/29511215/convert-row-names-into-first-column

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!